.net 如何使用linq to sql或实体框架将实体添加到两个不同的父实体中?
是否可以将同一实体添加到两个不同的实体,而不复制子实体?奇怪的问题,我知道,但以下是我在伪代码中要做的.net 如何使用linq to sql或实体框架将实体添加到两个不同的父实体中?,.net,entity-framework,linq-to-sql,.net,Entity Framework,Linq To Sql,是否可以将同一实体添加到两个不同的实体,而不复制子实体?奇怪的问题,我知道,但以下是我在伪代码中要做的 Transaction tran = new Transaction() Task task = new Task(); task.Name = "My Task"; User user = new User(); user.Name = "John Smith"; user.Tasks.Add(task); Document doc = new Document(); doc.Path
Transaction tran = new Transaction()
Task task = new Task();
task.Name = "My Task";
User user = new User();
user.Name = "John Smith";
user.Tasks.Add(task);
Document doc = new Document();
doc.Path = @"c:\temp\MyDoc.pdf";
doc.Tasks.Add(task);
tran.Users.Add(user);
tran.Documents.Add(doc);
tran.Create();
我希望开发人员能够将相同的任务对象添加到User.Tasks集合和Document.Tasks集合中,这样当我使用Create()方法插入数据库时,它就知道任务通过UserID和DocumentID与用户和文档都相关
任务表将具有以下各项的名称和ID:
任务表
ID int
UserID int
DocumentID int
etc...
一个相当简单的模型可以做到这一点:
public class Task
{
public int ID { get; set; }
public string Name { get; set; }
public Document Document { get; set; }
public User User { get; set; }
}
public class User
{
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Task> Tasks { get; set; }
}
public class Document
{
public int ID { get; set; }
public string Path { get; set; }
public ICollection<Task> Tasks { get; set; }
}
如果我先做数据库,并且我用正确的ID映射了关系,我还需要OnModelCreating方法吗?@RichC No。edmx包含模型。您不应该在模型创建时覆盖
。默认情况下,在database first中,此覆盖包含抛出新的意外CodeFirstException()哇,我不相信你,所以我测试了它,它确实像你说的那样工作。哈哈,谢谢!!
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Document>()
.HasMany(t => t.Tasks)
.WithOptional(t => t.Document)
.Map(m => m.MapKey("DocumentID"));
}