Ich habe versucht, die msdn article auf komplexen Typen zu lesen. Aber es erklärt nicht, wann man es benutzt. Es gibt auch keine umfassende Erklärung zu komplexen Typen im Web und wann sie zu verwenden sind.Was ist ein komplexer Typ in Entity-Framework und wann es zu verwenden?
Antwort
Die lange Erklärung ist in dem MSDN-Artikel, der Sie verknüpfen ..., so dass Sie im Grunde eine einfache Erklärung wollen:
Ein komplexer Typ eine Reihe von Eigenschaften, die für C# in einem eigenen Objekt existieren, sind aber abzubildenden Spalten in einer bereits vorhandenen Tabelle (die für die Entität, die sie enthält), anstatt eine eigene Tabelle zu haben (die einen Schlüssel usw. benötigen würde).
So vorstellen, wollen Sie diese Tabelle auf der Datenbank:
Orders
----------
Id (bigint)
Name (varchar)
Street (varchar)
Region (varchar)
Country (varchar)
Aber wollen diese Struktur in den C# Einheiten:
class Order
{
long Id;
string Name;
struct Address
{
string Street;
string Region;
string Country;
}
}
So gibt Address
wäre ein komplexer Typ sein: es würde nicht existieren allein (es gäbe keine Addresses
Tabelle) auf der Datenbank ... es würde nur als eine Reihe von Spalten auf der Orders
Tabelle existieren.
Wie @HenkHolterman in den Kommentaren erwähnt, wird der Wert komplexe Typen mit einer einzigen C# Einheit, die als Wert für andere enthält Einheiten verwendet werden kann (in meinem Beispiel, könnten Sie eine Address
in einer Supplier
Einheit haben zum Beispiel, aber es wird nur als eine Reihe von Spalten in der Tabelle Suppliers
zugeordnet werden). Es erleichtert die Arbeit mit den Werten des komplexen Typs.
Der Nachteil ist genau das: Sie müssen möglicherweise die komplexen Typ Werte mehrmals in der Datenbank wiederholen, wenn es vorkommen kann, dass ein Address
(oder welcher andere Typ Sie verwenden) kann unter verschiedenen Entitäten geteilt werden.
Ob Sie mit komplexen Typen oder separaten Entitäten arbeiten, liegt ganz bei Ihnen und Ihrem Design.
Ihre Kommentare zu Ihrer Antwort machen keinen Sinn, sieht aus wie @HenkHolterman gelöscht seine Kommentare – Thomas
Betrachten Sie diese ContactDetails
Klasse zum Beispiel:
public class ContactDetails
{
public string HomePhone { get; set; }
public string MobilePhone { get; set; }
public string FaxNumber { get; set; }
}
standardmäßig EF ContactDetails
als Entity behandeln. Das bedeutet, dass, wenn (zum Beispiel) Sie Person
Klasse mit einer Navigations-Eigenschaft ContactDetails
Art haben sollte, EF die Person.ContactDetails
Beziehung zu einer anderen Tabelle abbildet (weil Entity etwas ist, das eine Identität seines ist mit besitzen, daher können sich andere Entitäten darauf beziehen - und dies würde eine andere Tabelle in relationalen Begriffen erfordern.
von ContactDetails
als komplexer Typ bezeichnet stattdessen EF behandeln wird es nicht mehr als eine Einheit, die eine Beziehung und stattdessen wo es sich auf der gleichen Tabelle der Mutter (enthält) Einheit (Person
in meinem Beispiel) erfordert, macht es effektiv zu einem Value Object.
- 1. Was ist ein Mock und wann sollten Sie es verwenden?
- 2. Was ist kein Bereich Bean und wann es zu verwenden?
- 3. SignInManager, was ist es und wie, wann zu verwenden?
- 4. Was ist SAPI und wann würden Sie es verwenden?
- 5. Was ist ein komplexer Zuordnungsschlüssel in YAML?
- 6. Wann ist ein ausgearbeiteter Typspezifizierer zu verwenden?
- 7. Wann ist es gut, FTP zu verwenden?
- 8. Was ist __declspec und wann muss ich es verwenden?
- 9. Was ist SELF JOIN und wann würdest du es verwenden?
- 10. Wann ist es akzeptabel, ein FRAMESET zu verwenden
- 11. Wann ist es angebracht, NOLOCK zu verwenden?
- 12. Was ist ein Volltextindex und wann sollte ich ihn verwenden?
- 13. Wann ist es sicher, .toString() zu verwenden?
- 14. Was ist ein Stereo-Typ
- 15. Was und wann Tuple verwenden?
- 16. Wann ein Modul zu verwenden, und wann eine Klasse
- 17. Karten komplexer Typ zu flachen Typ in AutoMapper
- 18. Was ist ein Manifest in Scala und wann brauchst du es?
- 19. XSD: komplexer Typ Attribute?
- 20. Wann CheckBox zu verwenden ist und wann Switch
- 21. Was bedeutet es zu sagen, ein Typ ist "boxed"?
- 22. Wann ist es gut, verschachtelte Funktionen in Python zu verwenden?
- 23. Wann ist Q_NULLPTR zu verwenden?
- 24. Wann 'if ... else if' und wann zu verwenden ist
- 25. Wann GWT zu verwenden ist und wann nicht
- 26. Wann socket.io zu verwenden und wann Ajax zu verwenden
- 27. Wann ist VK_IMAGE_LAYOUT_GENERAL zu verwenden?
- 28. Was ist ein Typ- und Effektsystem?
- 29. Wann ist es angebracht, das KnownType-Attribut zu verwenden?
- 30. Wann AzureQueueSink zu verwenden ist
Im Folgenden finden Sie weitere Details, die jedoch nicht direkt auf Ihre Frage antworten - [Verknüpfungen in EF-Code zuerst: Teil 2 - Komplexe Typen] (http: //weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-2-complex-types) –
danke ich werde mich darum kümmern –