【发布时间】:2014-07-01 21:15:25
【问题描述】:
使用Code First 和EF 5.0 我有以下内容:
internal class Entities : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Project> Projects { get; set; }
}
// User class which holds a list of 'Project' class
public class User
{
private List<Project> _projects = new List<Project>();
public int Id { get; set; }
internal List<Project> Projects
{
get { return _projects; }
set { _projects = value; }
}
}
// Project class which holds a list of 'Milestone' class
public class Project
{
private List<Milestone> _milestones = new List<Milestone>();
public int Id { get; set; }
public string Title { get; set; }
internal List<Milestone> MileStones
{
get { return _milestones; }
set { _milestones = value; }
}
}
虽然 EF 已正确创建表和关系(一对多:用户=>项目=>里程碑)如果我创建一个包含一些项目的用户并将其添加到 DbContext,则只有用户将被添加到他的项目不会。对于具有里程碑的项目的用户也是如此。我是这样做的:
public void AddUser(User user)
{
using (var repository = new Entities())
{
repository.Users.Add(user);
repository.SaveChanges();
}
}
我的问题是如何强制EF 自动插入或更新复杂实体(级联),从而添加具有项目列表的用户,自动在 USERS 表中插入用户,在 PROJECTS 表中插入他的项目(具有正确的关系)?
EF 在它的第 5 个版本中那么聪明还是我应该手动完成?
【问题讨论】:
-
您是否尝试将设置器设置为
private? -
@Justin:那行不通。我什至做到了
public IReadOnlyList和public IReadOnlyCollection尽管我愿意,但EF拒绝映射只读属性。 -
您能否将它们公开并更改 get/set 以包含您的验证逻辑?
-
@Justin:一旦我返回集合(在此处列出),我就无法访问修改,除非我通过将其设为只读集合来限制修改。
-
您能否再解释一下您无法访问修改的原因?
标签: c# insert entity-framework-5 cascade