2011-03-17 36 views
6

Tôi đang cố gắng sử dụng Entity Framework 4.1 RC với phiên bản SQL Server 2005. Tôi đã tạo ra một cơ sở dữ liệu rỗng và tôi muốn tiếp tục tồn tại các đối tượng POCO của mình. POCO của tôi trông giống như:Entity Framework 4.1Code Đầu tiên kết nối với 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; } 
} 

My CartContext là:

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

Tôi có một chuỗi kết nối:

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

Khi tôi cố gắng và thêm một đối tượng với bối cảnh và lưu nó tôi get:

System.Data.Entity.Infrastructure.DbUpdateEx lừa dối: Đã xảy ra lỗi trong khi cập nhật các mục nhập . Xem ngoại lệ bên trong cho chi tiết . ---> System.Data.UpdateException: Đã xảy ra lỗi khi cập nhật các mục nhập. Xem ngoại lệ bên trong để biết chi tiết. ---> System.Data.SqlClient.SqlException: Tên đối tượng không hợp lệ 'dbo.Carts'.

Nếu tôi hồ sơ cơ sở dữ liệu tôi có thể thấy người dùng kết nối, tìm kiếm cơ sở dữ liệu trong sys.tables chạy truy vấn này:

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

Sau đó cố gắng để chèn đối tượng giỏ hàng của tôi. Nó không bao giờ cố gắng tạo bảng Carts. Tôi đoán có điều gì đó sai trái với chuỗi kết nối, nhưng tôi không thể tìm thấy các ví dụ ở bất cứ đâu về cách thực hiện điều này.

+0

Kết thúc chuỗi kết nối của bạn, bạn đã có một dấu chéo ngược nhưng nó phải là một forward slash ie /> not \> –

Trả lời

8

DbContext sẽ không tạo bảng chỉ vì nó không tồn tại. Khi bạn đang sử dụng cơ sở dữ liệu hiện tại, bạn cũng phải tạo bảng theo cách thủ công hoặc tạo trình khởi tạo tùy chỉnh. Trình khởi tạo mặc định chỉ có thể thả cơ sở dữ liệu và tạo cơ sở dữ liệu mới với tất cả các bảng được yêu cầu.

Bạn có thể ví dụ như cuộc gọi:

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

Hoặc:

context.Database.CreateIfNotExists(); 

Hoặc:

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

Câu trả lời hay, cảm ơn. Thật không may, điều này sẽ không có tác dụng đối với chúng tôi vào thời điểm này bởi vì chúng tôi có một sơ đồ hiện có mà tôi muốn thêm vào. DropCreateDatabaseIfModelChanges <> sẽ hủy bỏ lược đồ hiện có, đó là tin xấu! Thật đáng tiếc là họ đã không thực hiện điều này ở cấp độ lược đồ hơn là cho toàn bộ cơ sở dữ liệu. Tôi thích sử dụng mã đầu tiên, nó đẹp hơn rất nhiều. Câu trả lời sẽ là viết bộ khởi tạo của riêng tôi. –

Các vấn đề liên quan