2つのエンティティが関連していますが、従来のsqlスキーマには基本的に2つのキー列があります(2列キーではありません)。私は '偽のキー'の列に戻る関係を作成する必要があります。 Entity Framework 4.1でこれを宣言的に行う方法はありますか?Entity Framework 4.1 - 非キー列間の関係
Public Class Client
Inherits ModelBase
<Key(), Required()>
Public Property ClientID As Decimal
<Required(), StringLength(50)>
Public Property ClientCode As String
........
Public Class ClientLocation
Inherits ModelBase
........
<Required(), StringLength(50)>
Public Property ClientCode As String
........
<ForeignKey("ClientCode")>
Public Overridable Property Client As Clients.Client
そして、私は取得していますエラーは次のとおりです。
*一つ以上の検証エラーがモデルの生成中に検出されました: System.Data.Edm.EdmAssociationConstraint:すべての のプロパティの種類で参照制約の従属ロールは、プリンシパルロールの対応するプロパティタイプと同じ でなければなりません。 「ClientLocation」エンティティのプロパティ「ClientCode」のタイプではないプロパティのタイプは 参照制約「ClientLocation_Client」に実体「クライアント」に「CLIENTID」 試合を行います。*
それは私が考えているので」メートル
任意の考え...私は本当にClientLocation.ClientCode> Client.ClientCodeをマップしようとしていたときに、ClientLocation.ClientCode> Client.ClientIDをマップしようとしていますか?
ありがとうございます!
"* ...レガシーSQLスキーマには、基本的に同じテーブルの2つのキー列があります。*": 'Client.ClientCode'はデータベース内のユニークなインデックスを持つ列ですか?または、「2つのキー列...複合キーではない」は何ですか?そして、この独自の列 'Client.ClientCode'に' ClientLocation.Client'を何とかマッピングしたいのですか? – Slauma
テーブルには2つの有効なキーがありますが、2つ目のキーはキーとして識別されず、インデックスもありません。例えば、ClientIDは4であり、ClientCodeは「FOGCREEK」であってもよい。 2つは関連していないか依存していません。 はい、エンティティのキーとしてマークされていなくても、Client.ClientCodeを使用して元のテーブルにマップする必要があります。 –
ああ、わかりました、そして、 'ClientCode'は普通の列です。一意性はビジネスロジックによって間違いなく確実に保証されます。私はLadilavの答えが最終的な言葉であることを恐れています。 – Slauma