【问题标题】:Asp.net Seeding db Entity Framework is not workingAsp.net Seeding db Entity Framework 不工作
【发布时间】:2013-11-12 07:35:54
【问题描述】:

我想用默认数据为数据库做种,但我得到了一个异常抛出。

我在 DAL 命名空间中添加了这个初始化类

public class MyModelInitialise : DropCreateDatabaseIfModelChanges<MyModelContext>

{

    protected override void Seed(MyModelContext context)

    {

        base.Seed(context);



        var MyMarks = new List<MyMark>

        {

         new Mark{ Name="Mark1", Value="250"},

         new Mark{ Name="Mark2", Value="350"},

         new Mark{ Name="Mark3", Value="450"}

        };

        Marks.ForEach(bm => context.Marks.Add(bm));



        context.SaveChanges();

    }

}

我将此初始化程序添加到应用启动

protected void Application_Start()

   {

        Database.SetInitializer<MyModelContext>(new MyModelInitialise());

   }

调用此方法时出现以下错误

Model compatibility cannot be checked because the DbContext instance was not created
using Code First patterns. DbContext instances created from an ObjectContext or using 
an EDMX file cannot be checked for compatibility.

【问题讨论】:

    标签: asp.net-mvc entity-framework seeding


    【解决方案1】:

    请改用IDatabaseInitializer&lt;TContext&gt; 接口,因为DropCreateDatabaseIfModelChanges 仅适用于 Code-First 模型:

    public class MyModelInitialise : IDatabaseInitializer<MyModelContext>
    {
      public void InitializeDatabase(MyModelContext context)
      {    
        // Runs everytime so just avoid if the table already has records.
        if (context.Marks.Count() == 0)
        {
          var MyMarks = new List<MyMark>
          {
            new Mark{ Name="Mark1", Value="250"},
            new Mark{ Name="Mark2", Value="350"},
            new Mark{ Name="Mark3", Value="450"}
          };
    
          Marks.ForEach(bm => context.Marks.Add(bm));
          context.SaveChanges();
        }
      }
    }
    

    保持Database.SetInitializer 完全相同。您可能应该将其包装在预处理器指令中,以确保它永远不会出现在生产代码中。

    #if DEBUG
          Database.SetInitializer<MyModelContext>(new MyModelInitialise());
    #endif
    

    【讨论】:

      【解决方案2】:

      确保您在 MyModelContext 类中有 public DbSet&lt;MyMark&gt; MyMarks { get; set; }

      【讨论】:

        猜你喜欢
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-08
        相关资源
        最近更新 更多