1

更新:原來我已經(藏在我的POCO對象)有一個抽象類型的屬性。刪除此屬性解決了這個問題。的DbContext初始化失敗模型的第一個數據庫


我試圖與實體框架模型的第一個場景4 CTP 5生成我的數據庫(目前使用SQL Server CE4後端,但我可以重現上一個SQL Server 2008後端)從我的模型。

我想我可能會莫名其妙地搞砸了我的模型定義,但我似乎無法找出錯誤信息和如何讓我毫無收穫。

我的DbContext對象被設置爲這樣:

public class MyDb : DbContext 
{ 
    public MyDb() 
    { 
     // Apply forced recreation tactics for now 
     DbDatabase.SetInitializer<MyDb>(new CreateDatabaseIfNotExists<MyDb>()); 
    } 

    public DbSet<UserAccount> UserAccounts { get; set; } 
    public DbSet<OtherData> OtherDatas { get; set; } 
    // etc 
} 

當我查詢它(如下):

 MyDb db = new MyDb(); 
     var matchingAccount = from user in db.UserAccounts where user.Email == email select user; 
     return matchingAccount.SingleOrDefault(); 

我收到以下錯誤:

[ArgumentNullException: Value cannot be null. Parameter name: entitySet]
System.Lazy 1.get_Value() +9591079
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +371 System.Data.Entity.Internal.InternalContext.Initialize() +16 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +15
System.Data.Entity.Internal.Linq.InternalSet
1.Initialize() +62 System.Data.Entity.Internal.Linq.InternalSet 1.get_Provider() +15 System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider() +13 System.Linq.Queryable.Where(IQueryable 1 source, Expression 1 predicate) +63

然而,我第一次構建,這是具體的錯誤:

[ArgumentNullException: Value cannot be null. Parameter name: entitySet]
System.Data.Entity.ModelConfiguration.Utilities.RuntimeFailureMethods.ReportFailure(ContractFailureKind contractFailureKind, String userMessage, String conditionText, Exception innerException) +970860
System.Data.Entity.ModelConfiguration.Edm.Db.Mapping.DbDatabaseMappingExtensions.GetEntitySetMapping(DbDatabaseMapping databaseMapping, EdmEntitySet entitySet) +147
System.Data.Entity.ModelConfiguration.Edm.Services.EntityTypeMappingGenerator.Generate(EdmEntityType entityType, DbDatabaseMapping databaseMapping) +206
System.Data.Entity.ModelConfiguration.Edm.Services.DatabaseMappingGenerator.GenerateEntityTypes(EdmModel model, DbDatabaseMapping databaseMapping) +253
System.Data.Entity.ModelConfiguration.Edm.Services.DatabaseMappingGenerator.Generate(EdmModel model) +168
System.Data.Entity.ModelConfiguration.Edm.EdmModelExtensions.GenerateDatabaseMapping(EdmModel model, DbProviderManifest providerManifest) +233
System.Data.Entity.ModelConfiguration.ModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo, Boolean validateModel) +280 System.Data.Entity.ModelConfiguration.ModelBuilder.Build(DbConnection providerConnection) +173
System.Data.Entity.Internal.LazyInternalContext.CreateModel() +61

+0

非常感謝!我瘋狂地想知道爲什麼我的分貝已經停止工作。就在昨天,我添加了一個抽象類作爲屬性給我的一個域對象。回到我認爲的界面! – nialljsmith 2011-06-21 11:39:40

回答

-1

// Apply forced recreation tactics for now 
     DbDatabase.SetInitializer<BudgetnetDatabase>(new CreateDatabaseIfNotExists<BudgetnetDatabase>()); 

只應在一次項目中應用。我建議你將這些代碼移出課程。

有更多的分貝範圍內?

任何配置?

是有可能看到BudgetnetDatabase?

,我們還需要看到POCO對象。

是數據庫中獲取創作呢?

+0

SetInitializer實際上是在靜態構造函數中。我移動它看看是否是這個問題。我有6個POCO課程。它們每個都包含公共的基元/字符串屬性。使用[http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4]中的技術打包的單個枚舉類型屬性.aspx](Alex James的博客)。關係式都是「public virtual ICollection 」的形式,每個PocoObject類在上下文中都有相應的'DbSet'屬性。數據庫沒有被創建。 – ulrikj 2011-02-26 13:52:02

相關問題