Create POCO class in EF 7 code first

喜欢而已 提交于 2019-12-13 08:25:38

问题


Say I have three tables. Settings, Facilities and FacilitySettingOverride in an existing database. The sample data:

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 has two foreign keys---FacilityId and SettingId. Also I want to make a composite key for FacilitySettingOverride.

I just don't know how to make it. My primary 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; }

I guess that it is wrong. Thanks for help.


回答1:


Looking at your data and description, both Settings and Facility have one-to-many associations to FacilitySettingOverride. So Setting shouldn't have a property ...

public FacilitySettingOverride FacilitySettingOverride { get; set; }

... but a collection of FacilitySettingOverrides, just as Facility has.

This should be the proper class model:

[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; }
}

The combination of KeyAttribute and ColumnAttribute ([Key, Column(Order = 1)]) is used for composite primary keys.

This is the database schema EF creates from it:



来源:https://stackoverflow.com/questions/37398577/create-poco-class-in-ef-7-code-first

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!