繼承人的例外:爲什麼EF代碼首先拋出模型支持上下文異常?使用4.0.3
因爲 數據庫創建模型靠山「ScannerContext」已經時過境遷。考慮使用Code First Migrations來更新 數據庫(http://go.microsoft.com/fwlink/?LinkId=238269)。
我每次運行我的應用程序都會得到這個。我無法弄清楚它的含義。我認爲這意味着某些東西沒有正確映射,但我無法弄清楚什麼。我正在使用代碼第一個模型,並且我有一個現有的數據庫,我完全想要自定義映射。現在,我的所有課程都與我的數據庫命名相同,以消除可能的課程。
當我嘗試將實體.Add()
放到上下文中時拋出異常。
實體,因爲它是在數據庫
實體在我的數據層
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();
}
}
您的數據庫中有固定長度的字段,並且這些外鍵位於數據庫表格中,但未映射到您的模型中。 –
這是否意味着我的數據庫迫使我映射EF中的相關元素?它迫使FK和MaxLengths? – jwrightmail
我向模型添加了缺失的關係,但仍然收到相同的錯誤。我想達到它的作用點,所以我可以開始弄清楚一切如何一起。我有很多尚未包含的實體,並計劃使這些對象健壯,但我甚至不能使用代碼先將一個實體放入數據庫。 – jwrightmail