Ausgabe
Also übertrage ich Domänenklassen ( viele ) mit EF6 auf Postgres . Klassen können Werttypeigenschaften wie int und float haben und werden als NOT NULL
.
Ich kann die Eigenschaften meiner Domänenklassen nicht nullfähig machen, da dies die Geschäftslogik beeinträchtigen könnte.
Ich habe diesen Ansatz gesehen – Requisiten optional machen
aber das bedeutet, dass ich dies OnModelCreating
in meinem dbcontext
für jede Klasse, die ich habe, manuell tun muss, richtig?
Gibt es also eine Möglichkeit, Werttypen (für alle meine Domänenklassen) in der Datenbank nullfähig zu machen, z. B. bei der anfänglichen Migration (oder auf andere Weise in großen Mengen) – damit ich sie nicht OnModelCreating
für jede Klasse, die ich habe, manuell angeben muss? Vielleicht ist es mit einer benutzerdefinierten Konvention dafür möglich?
tldr – Ich möchte jede Eigenschaft des Werttyps jeder Klasse in der Datenbank mit ef6 nullfähig machen, ohne sie in der Domäne selbst nullfähig zu machen
Vielen Dank!
Lösung
Es gibt eine DbModelBuilder.Properties()- Methode.
Damit können die notwendigen Werte für alle Eigenschaften in der OnModelCreating
Methode eingestellt werden.
modelBuilder.Properties().Configure(p => p.IsOptional());
Dadurch ändern sich jedoch alle Eigenschaften. Natürlich müssen die Primärschlüssel und einige andere Spalten nicht geändert werden. Daher müssen sie herausgefiltert werden.
modelBuilder.Properties().Where(p => p.Name != "Id").Configure(p => p.IsOptional());
Oder sowas ähnliches:
modelBuilder.Properties().Where(p => p.Name.EndsWith("Id")).Configure(p => p.IsOptional());
Beantwortet von – Alexander Petrov
Antwort geprüft von – Candace Johnson (FixError Volunteer)