Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用linq to sql或实体框架将实体添加到两个不同的父实体中?_.net_Entity Framework_Linq To Sql - Fatal编程技术网

.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"));
}