0

これらの関係を適切に説明する方法についてのアドバイスは、素晴らしい出発点となります。正確に記述されたものは、解決策を探す問題です。エンティティ User と Login があります。ここで、Login は基本的に 1 人のユーザーのログイン セッションを表します。そのため、通常、User には多くの Login インスタンスがあります。この関係は、必須の単一の User ナビゲーション プロパティを使用して Login 側でのみ記述されます。User 側には、暗黙的ではあるが宣言されていない Login コレクションがあります。

次に、他の関係では、ユーザーはログインの承認の下で作成されるため、この関係はログイン ナビゲーション プロパティを使用してユーザー側で記述され、ログイン側には暗黙的ではあるがユーザー コレクションはありません。

DB ツールを使用する以外に DB モデリングを行うことはあまりありません。DB ツールは常に適切な関係を取得するだけですが、今では、流暢なマッピングを使用して、最初にこれらの関係をコードにマッピングする必要があります。この 2 つの関係をどのように説明すればよいでしょうか? 原理側と従属側とは何ですか? ここでの多重度とは何ですか?

4

1 に答える 1

0

Code First は、おそらく同じ関係の 2 つの側面を結び付けようとします。代わりに 2 つの異なる一方向のリレーションシップがある場合は、引数なしで WithMany() を使用して逆ナビゲーション プロパティが存在しないことを Code First に明示的に伝えることで、これを Code First に伝える必要があります。

public class User
{
    public int Id { get; set; }
    public int LoginId { get; set; }
    public virtual Login Login { get; set; }
}

public class Login
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public virtual User User { get; set; }
}

public class SomeContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Login> Logins{ get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
            .HasRequired(e => e.Login)
            .WithMany()
            .HasForeignKey(e => e.LoginId);

        modelBuilder.Entity<Login>()
            .HasRequired(e => e.User)
            .WithMany()
            .HasForeignKey(e => e.UserId);
    }
}
于 2012-04-22T15:03:32.417 に答える