2012-04-22 6 views
0

さえ適切に素晴らしいスタートとなり、これらの関係を記述する方法についていくつかのアドバイス。正確に記述されたものは、解決策を探している問題です。私はエンティティUserとLoginを持っています。ここで、Loginは基本的に1人のユーザのログインセッションを表しています。したがって、ユーザーには通常、複数のLoginインスタンスがあります。この関係は、ユーザー側で、ログインコレクションをのみ必要な、単一のユーザーナビゲーションプロパティを持つログイン側に記載されており、そこに暗示されていますが、宣言されていません。どのように私は同じ2つのエンティティ間の2つの関係をマッピングしていますか?

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

私は、DBのツールを使用しての外でずっとDBモデリングをしない、と彼らは常にちょうど私のための関係を得るが、今、私は流暢なマッピングを使用して、最初のコードのためにこれらの関係をマップする必要があります。この2つの関係、どのような原則と依存する側面、そしてここでの多重度は何ですか?

+0

そのログインができることを意味してい1人のユーザーに関連付けるが、別のユーザーには許可するその場合の認可は何ですか?ログインに許可されるユーザーの数はいくつですか? –

+0

ユーザーは、ユーザーが作成されたログインの下での記録を持っています。その点では、1回のログインで多数のユーザーを持つことができます。 ユーザがログインすると、そのユーザに対して1つのログインが作成されますが、ユーザが頻繁にログインすると1人のユーザが多数のログインを持つことができますが、この点では各ログインには1人のユーザしかありません。 – ProfK

答えて

0

コードファーストは、おそらく同じ関係であるかの二つの側面をリンクしようとします。あなたの代わりに二つの異なる単方向の関係を持っている場合、あなたは逆のナビゲーションプロパティは、引数なしでWithManyを()を使用して、存在しないことを明示的にコードファーストを伝えることで、コードファーストにこのことを伝える必要があります:

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); 
    } 
} 
+0

ありがとう、それは私が探しているもののように見えます。 – ProfK