3

继承人例外:

自数据库创建以来,支持“ScannerContext”上下文的模型已更改。考虑使用 Code First 迁移来更新数据库 ( http://go.microsoft.com/fwlink/?LinkId=238269 )。

每次我运行我的应用程序时都会得到这个。我无法弄清楚这意味着什么。我认为这意味着某些东西没有正确映射,但我不知道是什么。我正在使用代码优先模型,并且我有一个想要完全自定义映射的现有数据库。现在,我的类中的所有内容都与我的数据库命名相同,以消除可能的原因。

当我尝试.Add()将实体添加到上下文时抛出异常。

实体在数据库中

数据库图像

我的 DataLayer 中的实体

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();
    }
}
4

2 回答 2

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 约束迫使我添加缺少的关系项。

在这里找到信息。他们稍微解释了重要性。

自创建数据库以来,支持 <Database> 上下文的模型已更改

于 2012-10-17T04:25:34.373 回答
0

Enable-Migrations -ContextTypeName EmployeeProject.Models.DepartmentContext

意味着你必须写你的项目名称.Models.Context 名称

它会起作用的。

于 2014-11-28T06:02:38.797 回答