Ich versuche eine Pseudo-Implementierung von IDbSet<T>
Alles ist gut, außer für diese Zeile:
%Vor%... was mir diese Compilerfehler gibt:
Fehler FS0698: Ungültige Bedingung: Der für die Bedingung verwendete Typ ist versiegelt, was bedeutet, dass der Zwang nur maximal befriedigt werden konnte eine Lösung
Warnung FS0064: Dieses Konstrukt verursacht weniger Code generisch als durch die Typ Anmerkungen angegeben. Die Typvariable 'TD wurde auf Typ '' T 'beschränkt.
Fehler FS0663: Dieser Typ Parameter wurde in einer Weise verwendet, die es einschränkt, immer "T" zu sein wenn 'T: not struct'
Fehler FS0661: Eine oder mehrere der expliziten Klasse oder Funktionstypvariablen für diese Bindung konnten nicht verallgemeinert werden, weil sie auf andere Typen beschränkt waren
Diese Zeile versucht, diese Methode , die laut dieser Seite die folgende Signatur in C # hat:
%Vor%Und diese Unterschrift in F #:
%Vor%Wenn ich versuche, die Beispiel-F # -Signatur zu verwenden, erhalte ich eine Reihe von Syntaxfehlern, was mich nicht überrascht, da diese Signatur nicht einmal wie gültiges F # aussieht.
Ich bin nicht wirklich sicher, was ich von diesen Fehlermeldungen halten soll, oder wie ich meine Einschränkungen schreibe, um sowohl die Schnittstelle als auch den F # -Compiler zu erfüllen. Ich frage mich, ob es überhaupt möglich ist, diese spezielle Microsoft-Schnittstelle in dieser speziellen Microsoft-Programmiersprache zu implementieren. Irgendwelche Vorschläge wären willkommen.
Die Methode Create
benötigt eine Subtype-Einschränkung zwischen zwei generischen Typparametern. Ich fürchte, es gibt keine Möglichkeit, einem generischen Typparameter basierend auf einem anderen in F # eine Subtype-Einschränkung hinzuzufügen. Sie werden immer als gleich angenommen. Weitere Informationen finden Sie in der Spezifikation Neue Einschränkungen des Formulartyps: & gt; 'b sind wieder gelöst als type =' b.
Siehe diese Antwort für ein ähnliches Problem.
Wir sollten darum bitten, dieses Feature in die nächste F # -Version aufzunehmen.
Ich war anfangs sehr enttäuscht. Ich bin immer noch in irgendeiner Weise, aber es gibt einen Workaround in EF6. Sie können DbSet<'TEntity>
direkt erben und Überschreibungen verwenden, um die Auflistung im Speicher zu implementieren. Dies wird für die meisten Fälle ausreichen; Sie können von diesem Typ erben, wenn Sie eine konkrete Implementierung von Find
wollen.
Tags und Links entity-framework f#