EntityFrameworkとの条件付き関連付けを作成したいと思います。私の知る限り、条件付き外部キーを作成できないため、データベースサーバーレベルでこの問題を解決することはできません。私はそのようなテーブルを持っています:
---Property---
int id
string Name
int TypeId --> Condition on this.
int ValueId
---ValueString---
int id
string Value
---ValueInteger---
int id
int Value
---ValueBoolean---
int id
bool Value
これで、プロパティテーブルのTypeIdフィールドに値のタイプが含まれます。たとえば、TypeId == 0の場合、ValueIdはValueStringテーブルを指し、TypeId == 1の場合、ValueIdはValueIntegerテーブルを指します。
私はいくつかの回避策を実行しましたが、どこかで立ち往生しました:
私はそのような列挙型を持っています:
public enum PropertyType
{
String = 0,
Integer = 1,
Boolean = 2,
DateTime = 3,
List = 4
}
そして私はそのような部分的なクラスを実装しました:
public partial class ProductProperty : EntityObject
{
public object Value
{
get
{
switch (Property.Type)
{
case PropertyType.String:
return ValueString.Where(w => w.id == this.ValueId ).Select(s => s);//how to return?
break;
case PropertyType.Integer:
return ValueInteger.Where(w => w.id == this.ValueId ).Select(s => s) //how to return?
break;
case PropertyType.Boolean:
return ValueBoolean.Where(w => w.id == this.ValueId ).Select(s => s) //how to return?
break;
case PropertyType.DateTime:
return ValueDateTime.Where(w => w.id == this.ValueId ).Select(s => s) //how to return?
break;
default:
return null;
break;
}
}
set
{
}
}
}
しかし、EntityObject内のコンテキストオブジェクトに到達する方法がわからないため、プロパティEntityObjectのValue*テーブルに到達できませんでした。
それで、このアプローチは本当ですか、それとも私は何をすべきですか?trueの場合、EntityObjectでエンティティコンテキストオブジェクトを取得するにはどうすればよいですか?
編集:このアプローチを提案しない場合、あなたは何を提案しますか?ご意見をお聞かせください。私は、このアプローチの最良の代替案は次のようなものかもしれないと思います:
---Property---
int id
string ValueString
int ValueInteger
bool ValueBoolean
etc...
ただし、このように、別の値型を追加する場合は、テーブル構造を変更する必要があり、プロジェクトのエンティティモデルとオブジェクトモデルを更新する必要があります。値でデータをフィルタリングする必要があるため、シリアル化されたオブジェクトを使用できません。 編集が終了しました