C# 无法先使用EF代码对数据进行种子设定

C# 无法先使用EF代码对数据进行种子设定,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我发现了问题,解决办法在评论中 我可以创建表和图表,但不能将数据种子添加到表中 1.我通过Nuget安装了EF 2.在PM控制台中,我编写了EnableMigrations–EnableAutomaticMigrations 模型是全部。模型类库和上下文方法是全部。Dal类库我不明白我做错了什么,你能帮我吗 这是我的上下文代码: using All.Model; namespace All.Dal { public class AllDb : DbContext {

我发现了问题,解决办法在评论中

我可以创建表和图表,但不能将数据种子添加到表中

1.我通过Nuget安装了EF

2.在PM控制台中,我编写了EnableMigrations–EnableAutomaticMigrations

模型是全部。模型类库和上下文方法是全部。Dal类库我不明白我做错了什么,你能帮我吗

这是我的上下文代码:

using All.Model;  

 namespace All.Dal  
 {
    public class AllDb : DbContext
    {
    public AllDb()
    {
        Database.Connection.ConnectionString = "Server=SEUPHORIA;Database=AllDb;UID=sa;PWD=123;";
    }

    public DbSet<Category> Categories { get; set; }
    public DbSet<Comment> Comments { get; set; }
    public DbSet<Line> Lines { get; set; }
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<AllDb>(new DbStrategy());
        modelBuilder.Entity<Category>().Property(c => c.Name).IsRequired();
        modelBuilder.Entity<Comment>().Property(c => c.Letter).IsRequired();
    }
}
使用All.Model;
名称空间All.Dal
{
公共类AllDb:DbContext
{
公共AllDb()
{
Database.Connection.ConnectionString=“Server=SEUPHORIA;Database=AllDb;UID=sa;PWD=123;”;
}
公共数据库集类别{get;set;}
公共DbSet注释{get;set;}
公共数据库集行{get;set;}
公共数据库集用户{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
SetInitializer(new DbStrategy());
modelBuilder.Entity().Property(c=>c.Name.IsRequired();
modelBuilder.Entity().Property(c=>c.Letter.IsRequired();
}
}
}

这是我的策略代码:

using All.Model;

namespace All.Dal
{
   public class DbStrategy : DropCreateDatabaseIfModelChanges<AllDb>
  {
      protected override void Seed(AllDb context)
    {
        List<Category> CategoryDefault = new List<Category> 
        {
            new Category { Name="Organic", UpID = 0 },
            new Category { Name="Object", UpID=0},
            new Category { Name="Time",UpID=0},
        };

        foreach (Category item in CategoryDefault)
        {
          context.Categories.Add(item);
        } context.Users.Add(new User { Name = "sss" });

    }
 }
使用All.Model;
名称空间All.Dal
{
公共类DbStrategy:DropCreateDatabaseIfModelChanges
{
受保护的覆盖无效种子(AllDb上下文)
{
List CategoryDefault=新列表
{
新类别{Name=“Organic”,UpID=0},
新类别{Name=“Object”,UpID=0},
新类别{Name=“Time”,UpID=0},
};
foreach(CategoryDefault中的类别项)
{
上下文。类别。添加(项);
}Add(新用户{Name=“sss”});
}
}
}

这是我的分类课:

 public class Category : Standart
  {
    public int UpID { get; set; }
    public string Name { get; set; }
    public int LineID { get; set; }
    public virtual List<Line> Lines { get; set; }
 }
公共类类别:标准
{
公共整数UpID{get;set;}
公共字符串名称{get;set;}
public int LineID{get;set;}
公共虚拟列表行{get;set;}
}

您正在将项目添加到数据库上下文中,但没有通过调用SaveChanges()提交更改。只需添加这一行:

protected override void Seed(AllDb context)
{
    List<Category> CategoryDefault = new List<Category> 
    {
        new Category { Name="Organic", UpID = 0 },
        new Category { Name="Object", UpID=0},
        new Category { Name="Time",UpID=0},
    };

    foreach (Category item in CategoryDefault)
    {
      context.Categories.Add(item);
    }
    context.Users.Add(new User { Name = "sss" });
    context.SaveChanges(); // make sure you save!
}
受保护的覆盖无效种子(AllDb上下文)
{
List CategoryDefault=新列表
{
新类别{Name=“Organic”,UpID=0},
新类别{Name=“Object”,UpID=0},
新类别{Name=“Time”,UpID=0},
};
foreach(CategoryDefault中的类别项)
{
上下文。类别。添加(项);
}
Add(新用户{Name=“sss”});
context.SaveChanges();//确保保存!
}

您可以共享类别表架构吗?我已经添加了类别请查看此项谢谢我阅读了您的建议并从表中删除了所有不可为空的类仅ID、名称和UpID左侧,但仍然是seed。prashanth您是对的,我找到了解决方案。继承的类“Standart”正在将null设置为不可为null的表,非常感谢。您不能进行保存更改的是上下文而不是数据库。顺便说一句,我尝试了,但没有成功。为什么您不能使用?当您尝试时,它会做什么?我发现了问题,因为prashanth说我将null数据发送到不可为null的列。SaveChanges会先将数据保存到上下文,然后再将数据保存到数据库,而不仅仅是上下文。谢谢您的帮助。