0

是否可以将相同的实体添加到两个不同的实体而不复制子实体?奇怪的问题,我知道,但这就是我试图用伪代码做的事情......

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...
4

1 回答 1

1

一个相当简单的模型可以做到这一点:

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; }
}

默认情况下,EF 将命名外键列Document_IDUser_ID(带下划线)。如果你不想这样,你可以告诉 EF 应该使用其他列名,例如像这样(在 中DbContext):

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  modelBuilder.Entity<Document>()
              .HasMany(t => t.Tasks)
              .WithOptional(t => t.Document)
              .Map(m => m.MapKey("DocumentID"));
}
于 2013-09-27T21:03:45.983 回答