使用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版或我應該手動做?
您是否嘗試過將setter設置爲'private'? – Justin
@Justin:這是行不通的。儘管我願意,我甚至將其設置爲「public IReadOnlyList」和「public IReadOnlyCollection」,但是「EF」拒絕映射只讀屬性。 – Xaqron
您可以將它們公開並更改get/set以包含驗證邏輯嗎? – Justin