0

最初にEF5コードのテーブル作成に問題があります。2つのケースとその出力を示します。それらの違いと、目標を達成するためにどのように成功できるかを知りたいのです。

ケース1

public class User{

public int ID { get; set; }

public string Name { get; set; }

public ICollection<UserMessage> Messages { get; set; }

}

public class UserMessage{

public int ID { get; set; }

public string Message { get; set; }   

public User CreatedBy { get; set; }

public ICollection<User> PermittedUsers {get; set;}

}

この場合、エンティティフレームワークは、UserのUserMessage_IDとUserMessageのCreatedBy_IDでのみ相互にバインドするUserクラスとUserMessageクラスのみを生成します。

私が興味を持っている問題はここにあります。新しいメッセージを作成するたびに、EF5は許可されたユーザーをどのように認識しますか?許可されたユーザーごとに同じメッセージを複製しますか?または何?

ケース2

public class User{

public int ID { get; set; }

public string Name { get; set; }

public ICollection<UserMessage> Messages { get; set; }

}

public class UserMessage{

public int ID { get; set; }

public string Message { get; set; }   

public ICollection<User> PermittedUsers {get; set;}

}

この場合、UserMessageエンティティのCreatedByのみを削除しました。これで、EF5はUser、UserMessage、UserMessageUsersという名前の3つのテーブルを生成します。UserMessageとUserの間のリンクは、許可されたユーザーを簡単に管理できるようにUserMessageUsersを介して行われます。

ケース2を分割せずに、CreatedByプロパティをUserMessageに追加するにはどうすればよいですか?

4

1 に答える 1

0

流暢なAPIを使用して構成できます。

modelBuilder.Entity<UserMessage>()
    .HasMany(d=>d.PermittedUsers)
    .WithMany(d=>d.Messages)
    .Map(c=>c.ToTable("UserMessageUsers"));
于 2012-11-11T17:12:14.877 に答える