Asp.net 设定数据库实体框架不起作用



我想用默认数据为数据库播种,但得到一个异常。

我在 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.

改用 IDatabaseInitializer<TContext> 接口,因为DropCreateDatabaseIfModelChanges仅适用于代码优先模型:

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

确保您在MyModelContext类中有public DbSet<MyMark> MyMarks { get; set; }

最新更新