Entity Framework 5 - Ungültiger Spaltenname - Reverse Engineering-Code Erste
Mit Entity Framework 5, Visual Studio 2010 mit der Entity Framework Power Tools (Beta 2) Erweiterung.
Hier ist meine Datenbank-Tabelle Struktur:
Benutzte ich die Reverse Engineering von Code First Funktion der oben genannten Erweiterung, die generiert die POCO-Klassen und einige 'mapping' - Dateien (nicht sicher, ob das die formalen Sprachgebrauch) und eine einzige DbContext abgeleitete Klasse. Andere als die änderung, die ich im folgenden beschrieben, werden alle diese generierten Klassen werden als erzeugt durch das power-tool.
In der Kategorie.cs-Datei habe ich folgenden code Hinzugefügt, um zu helfen reduzieren Sie das Objektdiagramm ein bisschen:
private ICollection<Product> m_Products = null;
public ICollection<Product> Products
{
get
{
if (m_Products == null)
{
m_Products = new List<Product>();
foreach (var categoryProduct in CategoryProducts)
{
m_Products.Add(categoryProduct.Product);
}
}
return m_Products;
}
set { m_Products = value; }
}
Bekomme ich die folgende Ausnahme, die ich weiß, muss etwas zu tun mit den Zuordnungen, aber ich kann nicht ganz herausfinden.
Unhandled Exception: System.Data.EntityCommandExecutionException: An error occurred while
executing the command definition. See the inner exception for details.
---> System.Data.SqlClient.SqlException:
Invalid column name 'Category_CategoryId'.
Wenn ich brauche, um nach mehr Informationen, wie die Besonderheiten des mappings, lasst es mich einfach wissen und ich werde es tun. Ich wollte diese so kurz wie möglich, aber ich merke, ich habe einige Dinge weggelassen, die für diejenigen, die nicht mit dem code von dem tool generiert, kann sich verlassen, man will mehr details.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sie Hinzugefügt haben, eine navigation, die Eigenschaft das Modell EF ist zu versuchen, um anzeigen, die zu Ihrer Datenbank. "Code First" bedeutet, dass Ihr code-Modell definiert das Datenbankschema.
Versuchen Sie, die
[NotMapped]
- Attribut zu Ihrer helper Eigenschaften zu sagen, EF, um Sie zu ignorieren.In Fall, dass Sie erstellt haben DB-Schema automatisch und Sie nicht mit Strategien wie (DropDatabaseAlways/DropDatabaseIfModelChanges) - mit anderen Worten: Sie sind wirklich in Reverse Engineering), es scheint, dass Sie müssen manuell hinzufügen Spalte "CategoryId" auf "Kategorie" Tabelle.
Den Fall, dass Sie nicht arbeiten wollen mit der Eigenschaft (ich meine in DB) verwenden, können Sie Daten Anmerkung
[NotMapped]
oder Fluent APImodelBuilder.Entity<Category>().Ignore(x=> x.CategoryId)
Schließlich ist es möglich, dass problem bei der Zuordnung. Ich weiß nicht, ob Sie mithilfe von datenanmerkungen oder Fluent API, aber EF kann automatisch Blicke für einige db-Spalte (logische Verhalten, abgeleitet aus dem Modell) und kann ihn nicht finden. In diesem Fall empfehle ich Ihnen, um eine revision der Zuordnung.
Die OP schon gelöst, Ihr problem, aber ich hatte einen ähnlichen Fehler mit einer anderen Lösung. So ist es hier im Falle dass andere es brauchen:
Mir fehlte eine navigationseigenschaft auf der einen Seite eine 0..1-Beziehung zwischen Entitäten. Sobald ich fügte hinzu, eine entsprechende navigation-Eigenschaft auf die Person, die fehlte, es war das problem gelöst.
Etwas mehr details: ich hatte zwei Personen mit einem 0..1 Beziehung mit einem FK. Person A (Mutter) hatte ein FK zu Person B (Kind). Die untergeordnete Entität B hatte eine navigationseigenschaft Person, sondern Eine Tat nicht haben eine navigationseigenschaft B. Nach dem hinzufügen dieser war das problem gelöst.