在多对多中,使用ID代替整个对象并不容易。
考虑以下几点:
class Parent
{
public Parent()
{
Children = new List<Child>();
}
public int Id {get;set;}
public ICollection<Child> Children { get; set; }
}
class Child
{
public Child()
{
Parents = new List<Parent>();
}
public int Id {get;set;}
public ICollection<Parent> Parents { get; set; }
}
如果现有的孩子不加载(而不是想被预加载),您可以将ID为子条目只有建立的关系:
int existingChildId; // some value
var childPlaceholder = new Child { Id = existingChildId };
db.Children.Attach(childPlaceholder);
var newParent = new Parent();
newParent.Children.Add(childPlaceholder);
db.Parents.Add(newParent);
db.SaveChanges();
如果你不知道孩子是否已经装载的背景下,你仍然要避免数据库查询来加载它做,检查local
条目:
int existingChildId; // some value
var childPlaceholder = db.Children.Local.FirstOrDefault(x => x.Id == existingChildId) ??
db.Children.Attach(new Child { Id = existingChildId });
// placeholder is ready to use
[检查这一个](http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx) – Munzer
关于下面的评论我的答案:你的问题没有包含足够的细节来帮助您解决多层架构问题。如果您不仅需要通用示例解决方案,还需要提供有关特定案例的更多详细信息。 – grek40
完成后,我添加了更多信息。 Thx –