2017-06-04 3 views
0

Bei der Verwendung von EF Core Migrations erfasst das Tool nicht alle meine Eigenschaften, nur die "Id" und einige (nicht alle) der FKs (Navigationseigenschaften). Es scheint auch die "Tabelle pro Hierarchie" sehr gut zu verstehen - da es einen Diskriminator eingerichtet hat, wo ich es wollte, aber die Migrationsdatei selbst spiegelt nicht die Eigenschaften wieder, die ich in meinem Modell-Namensraum habe (siehe GitHub-Code).EF Core Migrations erfasst nicht alle Eigenschaften

Meine DbContext befinden sich hier: https://github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/InfoBoothContext.cs hier die Modellklassen: https://github.com/aredfox/TheConference/tree/master/InfoBooth/TheConference.InfoBooth.Core/Model

Sie bei der generierten "Initial Migration" aussehen kann [https://github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/Migrations/20170604125116_Initial.cs]. Dort sehen Sie, dass es alle Id-Eigenschaften (definiert in der Basisklasse [Entity][1]) aber keine der anderen Eigenschaften I meiner Model classes erkannt hat.

Ich verwendete den Ansatz, eine Konsolenanwendung hinzuzufügen, um Migrationen auszuführen (andernfalls wird es nicht funktionieren - siehe Julie Lerman's tips zum Einstieg in EF Core). Wenn ich also Migrationen mache, mache ich das so: dotnet ef --startup-project ../../TheConference.Infrastructure.ConsoleApp migrations add Initial.

Muss ich Anmerkungen oder Modelbuilder oder eine Form von EntityTypeConfiguration in EFCore verwenden müssen EF wissen zu lassen, was ich nehmen?.

Antwort

5

Alle Ihre Klasseneigenschaften sind wie folgt

public string Title { get; } 

das heißt nur Auto Eigenschaften lesen.

EF Core unterstützt keine solchen Eigenschaften. Um sie zugeordnet zu bekommen, müssen Sie Eigentum Setter

public string Title { get; set; } 

Die Zugriffsebene nicht wirklich wichtig bieten - private, protected oder internal arbeiten. Die einzige Voraussetzung ist ein Setter.

EF Core ermöglicht auch Mapping-Eigenschaften und die Verwendung von Backing-Feldern, aber alles erfordert fließende API-Konfiguration und auch höchstwahrscheinlich nicht mit Get-Auto-Eigenschaften arbeiten, weil sie mit readonly Felder gesichert sind.

+2

Um etwas mehr hinzuzufügen, benötigen die primitiven Eigenschaften und Referenznavigationseigenschaften Setter. Sammlungsnavigationen müssen nicht gesetzt werden. (Es ist üblich, dass der Benutzer den Auflistungsinitialisierer im Konstruktor oder im Standardwert aufruft). Die ID wurde abgeglichen, da die Schnittstelle über Setter definiert und die Navigation der Sammlungen zugeordnet wurde. – Smit

+0

Danke Kumpel. Finden Sie es auch heraus, wenn Sie sie mit der fließenden API cfg ich bekam die Fehlermeldung, dass sie readonly waren und dann mein Penny fiel ... Danke für die Antwort obwohl! Dummer Fehler, habe ich einfach übersehen. –

+1

Gern geschehen, Kumpel. Manchmal passiert es uns allen :) –