1

エンティティフレームワーク4.1:私は私のデータベーステーブル<em>(のAccessControl)<em>お客様</em>と他のテーブルのテーブルに含まれる情報に対するユーザー「アクセス制御リスト」のようなものを説明し</em>で持っている非常に特別な関係

例:エンティティCUSTOMERは、EntityId#1によってマークされます。ユーザーが部門6位に属している場合、彼は顧客の#16と#31のレコードにアクセスすることができますが、彼は#14のために、その缶は、部門第3位で、ユーザーが見ることはできません。ここで

Table ACCESSCONTROL: 

    EntityId PrimaryKey DepartmentId 
    1  16  6 
    1  31  6 
    1  14  3 

私は、ドメインで使用していたクラスの例:

Public Class Customer 
    Public Property Id As Integer 
    ....... 
    Public Overridable Property Acl As ICollection(Of AccessControl) 
End Class 

Public Class AccessControl 
    Public Property EntityId As Integer 
    Public Property PrimaryKey As Integer 
    Public Property DepartmentId As Integer 
End Class 

どのように私は流暢なコードファーストアプローチを使用してDbContext定義にこの関係を記述することができますか? ありがとうございます。

+0

データベースに外部キーはどのように定義されていますか?ヒント:EFはデータベースと同じルールを使用します(ユニークキーはサポートしません)。 –

+0

こんにちは、データベースでは、ドメイン内のエンティティとDbContextに含まれていないDepartmentsテーブルを持つDepartmentIdフィールドの外部キーリレーションのみを定義しました。 AccessControlテーブルは、EntityIdフィールドでマークされたさまざまなエンティティに属するレコードのルールを含むことができるため、他のエンティティとの強い関係はありません。 AccessControlの3つのフィールドはすべて、テーブルの主キーを表していることに注意してください。 – yeswest72

+0

'PrimaryKey'カラムは、複数のエンティティ(' EntityId'が異なる値を持つ場合)によって共有され、仮想リレーションを構築しますか? –

答えて

1

あなたの問題が正しく理解できれば、EFでこの関係を設定することはできません。それがうまくいかない理由はたくさんありますが、基本は次のとおりです.DBでこの関係を設定できない限り、EFでも設定することはできません。あなたの関係はデータ駆動型であり、EFはデータ駆動型マッピング(例えば、あなたのシナリオでは動作しないTPH継承)のサポートを非常に制限しています。

+0

ありがとう、私はこの答えを期待しました! – yeswest72

関連する問題

 関連する問題