在Entity Framework中使用一个语句对多个表进行种子设定

时间:2017-06-10 09:47:27

标签: c# sql entity-framework

我正在尝试使用EF中的一个语句更新多个表。

我有3个表CategorySubCategoryDetails。这是我尝试使用的示例代码:

if (context.Categories.Where(C => C.Code == 1).FirstOrDefault() == null)
{
    context.Categories.Add(new Data.Category() { Code = 1, Description = "First Category" });
    context.SubCategories.Add(new Data.SubCategory() { SubCode = 1, Description = "First SubCategory", CategoryCode = C.Code });
    context.Details.Add(new Data.Detail() { Code = 1, Description = "First Details", DetailCode = SubCode });
}

正如您所知,我只是在学习EF,我们非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

首先,您需要一个允许这样做的数据模型。像这样:

public class Category
{
   public int Code {get;set;}
   public List<SubCategory> SubCategories {get;set;}
}

public class SubCategory
{
   public int SubCode {get;set;}
   public int ParentCode {get;set;}
   public Category ParentCategory {get;set;}
}

您可以在一个EF语句中插入带有对象的对象:

var category = new Category
{
   Code = 1,
   SubCategories = new List<SubCategory>{new SubCategory{SubCode = 1}}
}

dbContext.Categories.Add(category);
dbContext.SaveChanges();

EF将使用孩子的ParentCode财产在父母与其孩子之间建立联系。 ParentCategory属性是子对象的导航属性,允许您轻松获取它的父级。