Ich möchte bedingte Verknüpfung mit Entity Framework erstellen. Soweit ich weiß, können wir keine bedingten Fremdschlüssel erstellen, daher kann ich dieses Problem nicht auf Datenbankserverebene lösen. Ich habe Tabellen wie folgt aus:Bedingte Assoziation mit 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
Nun enthält das TypeId Feld in der Eigenschaftstabelle den Typ des Wertes. Zum Beispiel, wenn der TypeId == 0, ValueID dann Punkte zu Tabelle value, wenn die TypeId == 1, dann ValueID Punkte ValueInteger Tisch usw.
ich etwas Abhilfe tat, aber ich steckte irgendwo:
ich habe eine Enumeration wie folgt aus:
public enum PropertyType
{
String = 0,
Integer = 1,
Boolean = 2,
DateTime = 3,
List = 4
}
und ich implementiert eine partielle Klasse wie folgt aus:
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
{
}
}
}
Aber ich weiß nicht, wie Kontextobjekt innerhalb eines EntityObject zu erreichen Daher konnte ich die Value * -Tabellen im Property EntityObject nicht erreichen.
Also, ist dieser Ansatz richtig oder was soll ich tun? Wenn es wahr ist, wie kann ich Entitätskontextobjekt in einem EntityObject erhalten?
Bearbeiten: Wenn Sie diesen Ansatz nicht vorschlagen, was würden Sie vorschlagen? Bitte teilen Sie Ihre Meinung mit uns. Ich denke, die beste Alternative zu diesem Ansatz so etwas wie dies auch sein mag:
---Property---
int id
string ValueString
int ValueInteger
bool ValueBoolean
etc...
Aber auf diese Weise, wenn ich einen anderen Wert Typ hinzugefügt werden soll, muss ich Tabellenstruktur ändern, und ich werde Entität aktualisieren müssen und Objektmodelle in meinem Projekt. Ich kann serialisierte Objekte nicht verwenden, da ich Daten über den Wert filtern muss. Bearbeiten beendet
Einige DBs (Oracle) erlauben einen solchen Schlüssel. Sie erwähnen nicht, welche DB Sie verwenden. Abgesehen davon ist dieses Design weder für eine Standard-SQL-Datenbank noch für die EF geeignet. Ich würde dir raten, dein Problem auf andere Weise zu lösen. –
Danke Craig, ich benutze MS SQL Server. Ich kann dieses Problem mit zusätzlichen öffentlichen Funktionen im Code verwalten. Aber es verwirrt nur meine Teammitglieder und es macht die Dinge komplexer. Ich brauche so einen Ansatz wie (String) SomeProperty.Value oder (int) SomeProperty.Value zu verwenden. Ich möchte keine zusätzlichen Funktionen implementieren, um den Wert der Eigenschaft zu erhalten. – oruchreis