2011-03-17 114 views
6

我試圖使用實體框架4.1 RC與SQL Server 2005實例。我創建了一個空的數據庫,我想將POCO對象保存到它。我的POCO的樣子:實體框架4.1代碼首先連接到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是:

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

我有一個連接字符串:

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

當我嘗試和對象添加到上下文並保存我獲得:

System.Data.Entity.Infrastructure.DbUpdateEx ception: 更新 條目時發生錯誤。請參閱 的內部例外詳情。 ---> System.Data.UpdateException:更新條目時發生錯誤 。 有關詳細信息,請參閱內部例外。 ---> System.Data.SqlClient.SqlException: 無效的對象名稱'dbo.Carts'。

如果我分析的數據庫,我可以看到用戶連接,請在SYS.TABLES數據庫運行此查詢:

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

然後嘗試將我的車對象。它從不嘗試創建購物車表。我猜連接字符串有問題,但是我無法在任何地方找到有關如何執行此操作的示例。

+0

在關閉的連接字符串,你已經有了一個反斜槓,但它應該是一個正斜槓即/>不\> – 2011-10-22 09:40:10

回答

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 <>將放棄現有方案,這是個壞消息!可惜的是,他們沒有在模式層面而不是整個數據庫實現這一點。我喜歡先使用代碼,它非常好。答案是我想我自己編寫初始化程序。 – 2011-03-18 18:53:44

相關問題