Я хочу создать условную ассоциацию с Entity Framework. Насколько я знаю, мы не можем создавать условные внешние ключи, поэтому я не могу решить эту проблему на уровне сервера базы данных. У меня есть такие таблицы:
---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, поэтому мне не удалось получить доступ к таблицам Value* в свойстве EntityObject.
Итак, верен ли этот подход или что мне делать? если это правда, как я могу получить объект контекста сущности в EntityObject?
Изменить. Если вы не предлагаете этот подход, что бы вы предложили? Пожалуйста, поделитесь с нами своим мнением. Я думаю, что лучшей альтернативой этому подходу может быть что-то вроде этого:
---Property---
int id
string ValueString
int ValueInteger
bool ValueBoolean
etc...
Но таким образом, если я захочу добавить еще один тип значения, мне придется изменить структуру таблицы, и мне придется обновить модели сущностей и объектов в моем проекте. Я не могу использовать сериализованные объекты, потому что мне нужно фильтровать данные по значению. Редактирование завершено