2009-05-27 6 views
1

Ich habe gerade versucht, ein umfangreiches Modell zu erstellen, zuerst mit dem POCO-Ansatz. Ich bekomme es aber nicht so, wie ich es wünsche. Lass uns einen Blog nehmen. Jeder Blog hat eine Reihe von Einträgen und jeder Eintrag hat eine Reihe von Kommentaren. Leider funktioniert das folgende Model nicht für mich. alt text http://blog.zoolutions.se/issue.pngEF4 - POCO Problem

Die Implementierung POCO-Klasse sieht wie folgt aus:

public class Blog 
{ 
    public bool Id { get; private set; } 
    public string Title { get; set; } 
    public bool AllowComments { get; set; } 
    public User User { get; set; } 
    public IList<Entry> Entries { get; set; } 
} 

public abstract class Post 
{ 
    public virtual int Id { get; set; } 
    public virtual string Header { get; set; } 
    public virtual string Text { get; set; } 
    public virtual DateTime CreatedAt { get; set; } 
    public virtual int UserId { get; set; } 
} 

public class Entry : Post 
{ 
    public Blog Blog { get; set; } 
    public IList<Comment> Comments { get; set; }   
} 

public class Comment : Post 
{ 
    public Entry Entry { get; set; } 
} 

Das bin ich eine sehr seltsame Fehler gibt:

System.Data.MetadataException: Schema specified is not valid. Errors: The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'Entry'. Previously found CLR type 'Entry', newly found CLR type 'System.Collections.Generic.Dictionary 2+Entry'. The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'Entry'. Previously found CLR type 'Entry', newly found CLR type 'System.Runtime.CompilerServices.ConditionalWeakTable 2+Entry'.

Irgendwelche Hinweise? Ich kann mich nicht um diese Fehlermeldung wickeln ...

Antwort

4

In Beta1 ist das Mapping für CLR-Klassen auf EDM-Typen etwas unerbittlich.

Es klingt, als ob das Problem hier ist, dass mehrere Entry-Klassen gefunden wurden, die nicht mit der erforderlichen Entry-Entität übereinstimmen. Wir sollten diese einfach ignorieren, aber in Beta1 tun wir das nicht und Sie erhalten eine Ausnahme.

Wir haben daran für die nächste Beta gearbeitet, so dass die EF weiterhin nach einer passenden Klasse sucht und in Ihrem Fall würde Ihre Entry-Klasse gefunden, und alles wäre in Ordnung.

Bis Beta2 veröffentlicht wird, müssen Sie wahrscheinlich den Namen Ihrer Entry-Klasse etwas einzigartiger ändern.

this helps

Alex

Program Manager im Team Entity Framework.

+0

Dank Alex, ich änderte es in BlogEntry, aber einige ich entdeckte, dass ich das Id-Feld von Blog zu bool als auch eingestellt hatte :) Ich lief in einige andere Probleme, aber sie sind einfacher zu arbeiten. – mhenrixon

+0

Oh und mach weiter so Alex, ich liebe wirklich, dass du mit EF4 gehst! – mhenrixon

1

Der Beitrag konnte nicht unter Alex James 'Antwort hinzugefügt werden.

EF4 noch ein Fehler ist, etwas Ähnliches wurde bereits von Microsoft in EF 4 Beta 2 behoben

ich einen Fehler aufgetreten sind, wenn die Klassen mit ähnlichen local Namen innerhalb der Baugruppe enthält Entitäten gespeichert werden, sondern gehören zu verschiedenen EF4 edmx Modelldateien (Beispiel: wenn Country Entität sowohl in GeographyConfigurationModel.edmx und CustomerServiceModel.edmx vorhanden ist). Die beiden Klassen Country enthalten in jedem Modell unterschiedliche Eigenschaften. Jedes Modell befindet sich in einem separaten Projektordner. Die Modelleigenschaft entity namespace wird angegeben (und sofort ignoriert).