2016-05-23 8 views
0

Sagen wir, ich habe drei Tabellen. Settings, Facilities und FacilitySettingOverride in einer vorhandenen Datenbank. Die Beispieldaten:Erstellen Sie POCO-Klasse in EF 7 Code zuerst

Settings table 

ID Name  Value 
1 test1 true 
2 test2 true 

Facilities table 

ID Name 
163 Demo1 
164 Demo2 

FacilitySettingOverride 
FacilityId  SettingId Value 
163    2   False 
164    1   False 
164    2   False 

FacilitySettingOverride hat zwei Fremdschlüssel --- FacilityId und SettingId. Ich möchte auch einen zusammengesetzten Schlüssel für FacilitySettingOverride machen.

Ich weiß einfach nicht, wie man es macht. Mein primärer Code.

[Table("Settings")] 
public class Setting 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Value { get; set; } 

    public FacilitySettingOverride FacilitySettingOverride { get; set; } 
} 

[Table("Facilities")] 
public class Facility 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<FacilitySettingOverride> FacilitySettingOverrides { get; set; } 
} 

[Table("FacilitySettingOverride")] 
public class FacilitySettingOverride 
{ 
    [Key] 
    [ForeignKey("FacilityId")] 
    public int FacilityId { get; set; } 

    public string Value { get; set; } 
    [ForeignKey("SettingId")] 
    public int SettingId { get; set; } 

    public virtual Facility Facility { get; set; } 
    public virtual Setting Setting { get; set; } 

Ich denke, dass es falsch ist. Danke für die Hilfe.

+0

Wenn Sie eine Datenbank haben, können Sie ein Modell 'Scaffold-DbContext' Befehl erzeugen kann. Warum versuchen Sie Code zuerst zu verwenden? –

+0

Ich kenne den Befehl nicht. –

+1

Also ist das ein Override :) von [dieser Frage] (http://stackoverflow.com/q/37354780/861716)? –

Antwort

1

Mit Blick auf Ihre Daten und Beschreibung haben Settings und Facility Eins-zu-viele-Verknüpfungen zu FacilitySettingOverride. So Setting sollte nicht eine Eigenschaft haben ...

public FacilitySettingOverride FacilitySettingOverride { get; set; } 

... sondern eine Sammlung von FacilitySettingOverride s, wie Facility hat.

Dies sollte das richtige Klasse Modell sein:

[Table("Settings")] 
public class Setting 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Value { get; set; }  
    public virtual ICollection<FacilitySettingOverride> FacilitySettingOverrides { get; set; } 
} 

[Table("Facilities")] 
public class Facility 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<FacilitySettingOverride> FacilitySettingOverrides { get; set; } 
} 

[Table("FacilitySettingOverride")] 
public class FacilitySettingOverride 
{ 
    [Key, Column(Order = 1)] 
    [ForeignKey("Facility")] 
    public int FacilityId { get; set; } 

    [Key, Column(Order = 2)] 
    [ForeignKey("Setting")] 
    public int SettingId { get; set; } 

    public virtual Facility Facility { get; set; } 
    public virtual Setting Setting { get; set; } 
    public string Value { get; set; } 
} 

Die Kombination von KeyAttribute und ColumnAttribute ([Key, Column(Order = 1)]) für zusammengesetzten Primärschlüssel verwendet wird.

Dies ist das Datenbankschema EF erstellt daraus:

enter image description here

+0

Danke, du rettest mein Leben. –

Verwandte Themen