2016-06-15 10 views
1

私は変更できないと言うことができる既存のデータベースを持っています。このデータベース内のテーブルの一つは、以下の構造を有する:異なる種類の列間のエンティティフレームワークの関係

Table Foo 
FooKey   UNIQUEIDENTIFIER 
ParentFooKey VARCHAR(36) 

したがって、本質的に、各列は、同じテーブル内の親との関係を有することができます。

EF Fluent APIを使用してこの関係をマップしようとしていますが、2つの列の型の違いにより問題があります。

ParentFooKeyをGuidに解析するFooクラスのプロパティを作成しようとしましたが、Fluent APIでこれを使用しようとすると、プロパティがEFにマップされていないためエラーが発生します。

また、ParentFooKeyをEFのGuidとしてマップする方法はありますか? ParentFooKey列の値は、常にGUIDの文字列表現またはNULLのいずれかです。

+1

は、同じ値を持つ必要があります。 SQLの外部キーについてもう少し詳しくお読みください。 – DespeiL

+0

ありがとう、私は感謝しますが、残念ながらモデルは古く、私はそれを設計しませんでした。したがって、問題です。 – Pseudo

答えて

1

私が知っているところから、あなたはできません。

YourContext.YourDbSet.Where(x=>x.FooKey == parentKey) 

また、あなたはあなたの人生を容易にするためにGUIDに変換する文字列のための拡張メソッドを作成することができます あなたのような何かが、あなたが必要なものを照会する必要があります。そのような何か:なぜEFは、あなたがそれはあなたがあなたのモデルが間違って設計することを意味します。この問題を持っているthis.Ifあなたが行うことは許されないように、SQLの外部キー列に

public Guid ToGuidOrDefault(this string s){ 
Guid guid = Guid.Empty; 
Guid.TryParse(s, out guid){ 
return guid; 

} 
+0

これはASP Identityの問題ですね。 :) – Alex

+0

私はこれが当てはまるかもしれないと考えましたが、この方法は1Foo1から返された各行に対して別々の呼び出しを行うことを意味するため、可能な場合は避けたかった – Pseudo

+0

EFがそれに従ってクエリを作成するように、しかし、私はGuid.Parse呼び出しをSQLに変換できるとは思わない。 – DevilSuichiro

関連する問題