2011-03-17 6 views
6

SQL Server 2005 인스턴스와 함께 Entity Framework 4.1 RC를 사용하려고합니다. 빈 데이터베이스를 만들었고 POCO 객체를 유지하려고합니다.Entity Framework 4.1Code SQL Server 2005에 처음 연결

public class Cart 
{ 
    public Cart() 
    { 
     this.CartId = Guid.NewGuid(); 

    } 

    public Guid CartId { get; set; } 
    public decimal TotalCost { get; set; } 
    public decimal SubTotalCost { get; set; } 
    public decimal Tax { get; set; } 
    public decimal EstimatedShippingCost { get; set; } 
} 

내 CartContext은 다음과 같습니다 : 나는 시도하고 컨텍스트에 개체를 추가하고 그것을 I를 저장하면

<add name="CartContext" connectionString="Server=myserver.mynetwork.net;User ID=MyUser;Pwd=mypassword;Initial Catalog=ExistingDb" providerName="System.Data.SqlClient" \> 

:

public class CartContext : DbContext 
{ 
    public DbSet<Cart> Carts { get; set; } 
    public DbSet<Attribute> Attributes { get; set; } 
    public DbSet<AttributeItem> AttributeItems { get; set; } 
} 

내가 연결 문자열을 가지고있는 것처럼 내 POCO 보인다 얻으십시오 :

System.Data.Entity.Infrastructure.DbUpdateEx ception : 항목을 업데이트하는 동안 오류가 발생했습니다. 세부 정보 내부 예외를 참조하십시오. ---> System.Data.UpdateException : 항목을 업데이트하는 동안 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오. ---> System.Data.SqlClient.SqlException : 잘못된 개체 이름 'dbo.Carts'.

SELECT TOP (1) 
[Extent1].[Id] AS [Id], 
[Extent1].[ModelHash] AS [ModelHash] 
FROM [dbo].[EdmMetadata] AS [Extent1] 
ORDER BY [Extent1].[Id] DESC 

그런 다음 내 장바구니에 객체를 삽입하려고 :

나는, 나는 사용자가 연결 볼 수있는 데이터베이스를 프로파일 sys.tables의 데이터베이스를 보면

이 쿼리를 실행합니다. Carts 테이블을 만들려하지 않습니다. 연결 문자열에 문제가있는 것 같지만이 작업을 수행하는 방법에 대한 예제는 찾을 수 없습니다.

+0

연결 문자열을 닫는에서 당신은 백 슬래시를 가지고 있지만, 그것은해야 앞으로 슬래시 ie /> not \> –

답변

8

DbContext는 테이블이 존재하지 않기 때문에 테이블을 만들지 않습니다. 기존 데이터베이스를 사용하고 나면 수동으로 테이블을 만들거나 사용자 지정 초기화 프로그램을 만들어야합니다. 기본 이니셜 라이저는 데이터베이스를 삭제하고 필요한 모든 테이블로 새 데이터베이스를 만들 수 있습니다.

당신은 예를 들어, 호출 할 수 있습니다

context.Database.Delete(); 
context.Database.Create(); 

또는 :

context.Database.CreateIfNotExists(); 

또는 :

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>()); 
// You don't need to call this. Initialization takes place anyway if context 
// needs it but you can enforce initialization for example in the application 
// startup instead of before the first database operation 
context.Database.Initialize(true); 
+0

위대한 대답, 고마워. 불행하게도 우리가 추가하고 싶은 기존의 계획이 있기 때문에 이것은 현재로서는 우리에게 효과가 없을 것입니다. DropCreateDatabaseIfModelChanges <>는 나쁜 소식 인 기존 스키마를 삭제합니다! 그들이 데이터베이스 전체가 아니라 스키마 레벨에서 이것을 구현하지 않았다는 것에 유감입니다. 먼저 코드를 사용하는 것을 좋아합니다. 훨씬 좋네요. 대답은 내 자신의 초기화 프로그램을 작성하는 것입니다. –