使用EF 5.0
的Code First
,我有以下内容:
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已经正确地创建了表和关系(User=>Project=>Milestone的一对多关系),但如果我创建一个带有一些项目的用户并将其添加到DbContext中,只有用户会被添加,而他的项目则不会。对于具有里程碑的项目的用户也是如此。我是这样做的:
public void AddUser(User user)
{
using (var repository = new Entities())
{
repository.Users.Add(user);
repository.SaveChanges();
}
}
我的问题是如何强制
EF
自动插入或更新复杂实体(级联),因此添加一个带有项目列表的用户,可以自动将用户插入到USERS表中,并将其项目与正确的关系自动插入到PROJECTS表中?
EF
在其第5个版本中是否如此智能,还是我应该手动操作?
private
? - JustinMyList.AsReadOnly()
的IList
属性是可行的,但我并不需要我的列表只读。当它是私有或内部时,我需要EF
进行映射。回答你的问题:列表是引用类型,如果直接返回它们(除非作为只读集合),它们可以直接修改。 - Xaqron