【发布时间】:2014-06-09 01:14:35
【问题描述】:
我正在尝试使用 Code First 方法创建一个包含单个自引用表“Categories”的数据库。下面是 Category POCO 实体的定义:
public class Category
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CategoryId { get; private set; }
public string Name { get; set; }
public int? ParentCategoryId { get; private set; }
[ForeignKey("ParentCategoryId")]
public Category ParentCategory { get; set; }
public List<Category> SubCategories { get; set; }
public Category()
{
SubCategories = new List<Category>();
}
}
这里是数据库的 DbContext 子类的定义:
public class CategoryContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public CategoryContext()
: base("name=CategoriesEntities") { }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Category>().HasMany(cat => cat.SubCategories).WithOptional(cat => cat.ParentCategory).HasForeignKey(cat => cat.ParentCategoryId);
}
}
现在我正在尝试填满表格:
using (var context = new CategoryContext())
{
var child = new Category { Name = "child" };
var parent = new Category { Name = "parent" };
parent.SubCategories.Add(child);
//child.ParentCategory = parent;
context.Categories.Add(child);
//context.Categories.Add(parent);
context.SaveChanges();
}
但我在结果表中看到的唯一记录是“子”记录。但是如果我将parent.SubCategories.Add(child) 行更改为child.ParentCategory = parent 行,一切都会正常工作,并且表将包含两条记录。如果我将context.Categories.Add(child) 更改为context.Categories.Add(parent),一切都会好起来的。
那么,我做错了什么?为什么不将父记录与子记录一起添加到表中?如何在不进行上述替换的情况下实现所需的行为?
任何帮助将不胜感激。
【问题讨论】:
标签: c# database entity-framework ef-code-first relational-database