2011-07-08 11 views
1

ユーザー、LOB(Line Of Business)およびロールがあるとします。ユーザーには1つのLOBがあります。ただし、ユーザーは異なるLOB内に多数のロールを持つこともできます。3ウェイ関係:ユーザー、LOBおよびロール

以下のコードファーストモデルでは、USERS、ROLES、LOBSという3つのテーブルを作成しています。自分のデバイスに残すと、UserRolesも作成されます。それは私が望むものではありません。

これまでは、UserLOBRole {RoleId、UserId、LOBCode}オブジェクトを作成しようとしましたが、すべてのフィールドを複合プライマリとしてマークしましたが、EFは外部キーについて嫌いです。

最初にEF 4.1コードでそのような関係を記述する方法はありますか?

ご協力いただきまして誠にありがとうございます。

public class User 
{ 
    public int UserId {get;set;} 
    public string UserName {get;set;} 
    public virtual LOB UserLOB {get;set;} 

    // HOW DO I DEFINE RELATIONSHIP HERE? 
    public virtual ICollection<Role> UserRoles {get;set;} 

} 

public class Role 
{ 
    public int RoleId {get;set;} 
    public string RoleName {get;set;} 
} 

public class LOB 
{ 
    public string LOBCode {get;set;} 
    public string LobName {get;set;} 
} 

答えて

0

なお、この新しいエンティティを介して別のエンティティと相互接続UserRoleとLOBとしてUserLOBRoleをさらすことなく不可能です。隠蔽ジャンクション・テーブルは、追加データなしで多対多の関係でのみ機能しますが、そうではありません。 EF code first demands navigation property on at least one side of the realationとあなたのLOBRoleは現在、それはとてもUserLOBRoleそれらを持っている必要があります持っていないため、

public class UserLOBRole 
{ 
    [Key, Column(Order = 0)] 
    public int UserId { get; set; } 
    [Key, Column(Order = 1)] 
    public int RoleId { get; set; } 
    [Key, Column(Order = 2)] 
    public string LOBCode { get; set; } 

    public virtual User User { get; set; } 
    public virtual Role Role { get; set; } 
    [ForeignKey("LOBCode")] 
    public virtual LOB LOB { get; set; } 
} 

あなたのコードは、おそらくFKS文句を言います。

そして、あなたのUserが今使用します。これが唯一の方法であるように

public class User 
{ 
    public int UserId {get;set;} 
    public string UserName {get;set;} 
    public virtual LOB UserLOB {get;set;} 

    public virtual ICollection<UserLOBRole> UserRoles {get;set;} 
} 
+0

おかげで、見えます。 「このユーザーにはどのような役割があるか」、「このユーザーにはロブで役割がある」などの質問に答えるためにAPIを磨く必要があります。 – b0rg

関連する問題