2012-10-16 43 views
3

繼承人的例外:爲什麼EF代碼首先拋出模型支持上下文異常?使用4.0.3

因爲 數據庫創建模型靠山「ScannerContext」已經時過境遷。考慮使用Code First Migrations來更新 數據庫(http://go.microsoft.com/fwlink/?LinkId=238269)。

我每次運行我的應用程序都會得到這個。我無法弄清楚它的含義。我認爲這意味着某些東西沒有正確映射,但我無法弄清楚什麼。我正在使用代碼第一個模型,並且我有一個現有的數據庫,我完全想要自定義映射。現在,我的所有課程都與我的數據庫命名相同,以消除可能的課程。

當我嘗試將實體.Add()放到上下文中時拋出異常。

實體,因爲它是在數據庫

DBimage

實體在我的數據層

public class EAsset 
{ 
    public int i_GID { get; set; } 
    public EAssetType Type { get; set; } 
    public EOrgEnvironment Environment { get; set; } 
    public EUser Contact { get; set; } 
    public string s_Name { get; set; } 
    public string s_Role { get; set; } 
    public DateTime d_Added { get; set; } 
    public DateTime d_LastUpdated { get; set; } 
    public bool b_Retired { get; set; } 

    public EAsset() 
    { 
     Type = new EAssetType(); 
     Environment = new EOrgEnvironment(); 
     Contact = new EUser(); 
     d_Added = DateTime.Now; 
     d_LastUpdated = DateTime.Now; 
    } 
} 

上下文對象(未遂表映射和密鑰分配)

public class ScannerContext : DbContext 
{ 
    public ScannerContext() 
     : base("LabDatabase") { } 

    public DbSet<EAsset> EAssets { get; set; } 
    public DbSet<EAssetType> EAssetTypes { get; set; } 
    public DbSet<EOrgEnvironment> EOrgEnvironments { get; set; } 
    public DbSet<EUser> EUsers { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<EAsset>().HasKey(k=>k.i_GID).ToTable("t_Assets"); 
     modelBuilder.Entity<EAssetType>().HasKey(k => k.i_ID).ToTable("t_Asset_Types"); 
     modelBuilder.Entity<EOrgEnvironment>().HasKey(k => k.i_ID).ToTable("t_Org_Environments"); 
     modelBuilder.Entity<EUser>().HasKey(k => k.i_ID).ToTable("t_Users"); 

     base.OnModelCreating(modelBuilder); 

    } 
} 

方案

class Program 
{ 
    static void Main(string[] args) 
    { 
     EAsset Entity = new EAsset { s_Name = "jewri-pc" }; 
     var sContext = new ScannerContext(); 
     sContext.EAssets.Add(Entity); 
     sContext.SaveChanges(); 
    } 
} 
+0

您的數據庫中有固定長度的字段,並且這些外鍵位於數據庫表格中,但未映射到您的模型中。 –

+0

這是否意味着我的數據庫迫使我映射EF中的相關元素?它迫使FK和MaxLengths? – jwrightmail

+0

我向模型添加了缺失的關係,但仍然收到相同的錯誤。我想達到它的作用點,所以我可以開始弄清楚一切如何一起。我有很多尚未包含的實體,並計劃使這些對象健壯,但我甚至不能使用代碼先將一個實體放入數據庫。 – jwrightmail

回答

4

對於EF運行時版本4.0.3/4.0版

public class ScannerContext : DbContext 
{ 
    public ScannerContext() 
     : base("LabDatabase") { } 

    ... 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     Database.SetInitializer<ScannerContext>(null); // <--- This is what i needed 

     ... 

     base.OnModelCreating(modelBuilder); 

    } 
} 

在安裝我現在追涉及具有我的所有關係的錯誤代碼佔在模型中。 FK Constraints迫使我添加缺失的關係項目。

在這裏找到了信息。他們解釋了一下重要性。

The model backing the <Database> context has changed since the database was created

0

啓用的遷移-ContextTypeName EmployeeProject.Models.DepartmentContext

意味着你必須寫你的項目name.Models.Context名

它將工作。

相關問題