Vielzahl constraint verletzt SQL Server 2008 - CodeFirst

Ich bin der Lösung ein sehr mühsames problem.
Ich habe eine Klasse namens "Nation" und eine Klasse namens National

public class Nation   
{
    public int ID {get; set;}
    public int name {get;set;}
    public List<NationAlly> NationAllies {get;set;}
}

public class NationAlly
{
    public int ID {get; set;}
    public int level {get;set;}
    public Nation toNation {get;set;}
}

Ich bin mit EF-4 und CodeFirst mit einem DbContext genannt NationsDB für die Verwaltung meiner Datenbank auf dem SQL-Server 2008.
Wenn ich ein neues Objekt vom Typ Nation, und ich versuche zu nennen, nationsDB.SaveChanges, habe ich die folgende exception:

"Vielzahl constraint verletzt. Die Rolle des "NationAlly_toNation_Target' der Beziehung 'CodeFirstNamespace.NationAlly_toNation' hat die Kardinalität 1 oder 0..1."

Ich versuchte zu retten, eine Nation mit NationAllies Feld null ist, und diese exception wird nicht geworfen, der nation-Tabelle in der Datenbank wird alle die richtigen Werte.

In meiner Datenbank die Tabelle Nation hat 2 Felder: ID(Primärschlüssel) - name
Der Tabelle National hat 3 Felder: ID(Primärschlüssel), Ebene, NationID
Die beiden Tabellen sind verknüpft mit einer Beziehung, wo auf Nationaler Ebene.NationID ist Fremdschlüssel und Nation.ID ist primary key.

Ist das nicht seltsam? In meinen Augen ist der Tabelle National sollte ein Feld namens NationID1 und anderen genannt NationID2 zu erstellen, die "Beziehung" zwischen einer nation und einer Liste von anderen Nationen.

Was habe ich falsch gemacht?

  • Ist NationAlly darstellen soll, eine viele-zu-viele-Beziehung? d.h., Eine nation hat viele Verbündete, und kann auch ein Verbündeter sein, um viele Nationen?
  • Eine Nation als natürlich viele NationAllies, da in der nation gibt es eine Liste mit National Entitäten. Ein single National entity hat eine und nur eine Nation, die die "Besitzer" der nation (wer hat die Liste, die auf Nationaler Ebene) und eine und nur eine Nation, die die "toNation", zu dem die Beziehung auf.
  • Wann genau bekommst du die Ausnahme? Sie schreiben, dass Sie "erstellen Sie ein neues Objekt vom Typ Nation" SaveChanges aufrufen, und die exception wird geworfen. Zwei Absätze weiter unten schreiben Sie: "ich versuchte zu retten, eine Nation mit NationAllies Feld null ist, und diese exception wird nicht geworfen." Wo ist der Unterschied? Fügen Sie NationAllies im ersten Fall?
  • Die Ausnahme wird ausgelöst, wenn ich SaveChanges aufrufen. In den anderen Absatz ich war nur zu beschreiben, dass keine Ausnahme wird geworfen, wenn ich verlassen das Feld NationAllies null.
InformationsquelleAutor Francesco | 2011-03-24
Schreibe einen Kommentar