2014-09-17 3 views
7

Ich habe den nächsten Code für zwei Klassen:Wie wird eine 0 .. * - Beziehung im Entity Framework Code zuerst festgelegt?

public class Object 
{ 
    public int ObjectID { get; set; } 

    public int Object2ID { get; set; } 
    public virtual Object2 Object2 { get; set; } 
} 

public class Object2 
{ 
    public int Object2ID { get; set; } 

    public virtual ICollection<Object> Objects { get; set; } 
} 

Ich weiß, dass mit Entity Framework, das eine Beziehung einer Eins-zu-viele schaffen wird, aber was ich wissen will, ist, wie man dies ein zu transformieren Null-zu-Viele-Beziehung.

Ich bin neu in Entity Framework und konnte keine direkte Antwort finden.

+2

Es ist immer noch eine zu viele Beziehung, die Differenz entweder nur auf Dependent erforderlich Auftraggeber oder optional Auftraggeber zu haben. –

+2

Ich stimme zu, ich kann nicht sehen, wie Sie eine 0 zu irgendetwas Beziehung haben können, wenn es 0 von etwas gibt, dann kann es nichts beziehen. –

+2

Nur eine fyi, normale Nomenklatur Sie nicht '∞', da es ein spezielles Zeichen ist und einige Systeme mögen nicht die Unicode. Normalerweise würden Sie es als "0 .. *" ausdrücken und das ist, was Sie in den meisten Dokumentationsreferenzen sehen werden. –

Antwort

5

Für eine 0-zu-viele-Beziehung in Entity Framework muss der Fremdschlüssel nullfähig sein.

public int? Object2ID { get; set; } 
+0

Muss ich setzen öffentliche virtuelle Object2 Object2 {bekommen; einstellen; } Als Nullable auch, oder nur der Schlüssel? –

+0

Nein. Als Klasse kann Objekt2 bei Bedarf bereits auf null gesetzt werden. – UtopiaLtd

+1

@ user3552621 Es ist NULL "von Natur aus". Übrigens brauchen Sie Object2ID nicht in der Klasse Object zu haben. –

3

Ein anderer Weg, dies zu tun ist durch Fluent API:

public class YouDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder mb) 
    { 
     mb.Entity<Object2> 
      .HasMany(o1 => o1.Objects) 
      .WithOptional(o2 => o2.Object2); 

     base.OnModelCreating(mb); 
    } 
}