2014-11-06 2 views
5

Ich versuche, einige Modelle zu definieren, die ich in Entity Framework 6 verwende. Ich möchte F # Datensätze verwenden. Wenn ich [<CLIMutable>] über die Datensatzdefinition setzen und ICollection<'a> für, nun, die Sammlungen verwenden. EF funktioniert gut.So erstellen Sie ein virtuelles Datensatzfeld für Entity Framework Lazy loading

Ich kann die Datensätze speichern und abrufen. Damit EF jedoch lazy lädt, muss das Datensatzfeld mit der Sammlung virtuell erstellt werden. Ich kann ein Property-Member virtuell machen, indem es es abstrakt macht und einen Standard bereitstellt. Aufzeichnungen sind keine Klassen. Ist es möglich, ein Rekordfeld virtuell zu machen?

Wenn ich versuche, den Datensatz mit einem abstrakten Mitglied zu erweitern ich diesen Fehler this declaration element is not permitted in an augmentation

Antwort

5

Soweit ich weiß, kann man nicht ein virtuelles Mitglied in einem Datensatz definieren - das macht Sinn, denn man kann auch nicht von erben eine Aufzeichnung, also warum brauchen Sie virtuelle Mitglieder?

Aber ich kann sehen, warum dies für Entity Framework benötigt würde. Vielleicht wäre es sinnvoll, etwas wie CliVirtual Attribut zu haben, ähnlich wie CliMutable (vor allem wenn das oft passiert). Fühlen Sie sich frei, dies bei der F# uservoice page vorschlagen!

Also, ich denke, die beste Wahl gewöhnliche Klasse ist mit virtuellen automatisch implementierte Eigenschaften zu verwenden (die deutlich hässlicher aussieht):

type A() = 
    abstract member Id: int with get, set 
    default val Id = 123 with get, set 

Oder vielleicht sehen, ob einige der anderen SQL-Typ-Provider für F # let Du machst dasselbe besser!

+1

Vielen Dank. Habe es vorgeschlagen. http://fslang.uservoice.com/forums/245727-f-language/suggestions/6672675-an-clivirtual-attribute – Remko

+0

Ich habe dafür gestimmt. –

Verwandte Themen