0

子エンティティを複製せずに、同じエンティティを 2 つの異なるエンティティに追加することはできますか? 奇妙な質問ですが、私は疑似コードでやろうとしていることを知っています...

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 を介して User と Document の両方に関連付けられます。

Task テーブルには、それぞれの 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_IDに and User_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 に答える