为什么EF代码首先抛出模型支持上下文异常?使用4.0.3

时间:2012-10-16 22:21:39

标签: entity-framework mapping entity code-first dbcontext

以下是例外:

  

支持'ScannerContext'上下文的模型自从以来发生了变化     数据库已创建。考虑使用Code First Migrations进行更新     数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

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

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

数据库中的实体

DBimage

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

2 个答案:

答案 0 :(得分: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约束强迫我添加缺少的关系项。

在此处找到信息。他们解释了重要性。

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

答案 1 :(得分:0)

启用 - 迁移--ContextTypeName EmployeeProject.Models.DepartmentContext

表示您必须编写项目名称。模型.Context名称

它会起作用。