EF代码首先,单向多对多关系不是由第二实体的Id

时间:2013-11-08 13:05:08

标签: c# entity-framework code-first data-modeling

这是我第一次在Stack中询问某些内容,而且我已经搜索了很多,但没有运气。

我正在使用EF 4,我希望首先使用代码创建多对多的关系。 我遇到的问题是应用程序已本地化,目前有两种语言(西班牙语和英语) 因此,我创建了两个实体: 从业者和专业:

[Table("Practitioners")]
public class PractitionerModel
{
   [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int Id { get; set;}
    public ICollection<SpecialityModel> Specialities { get; set; }
}

[Table("Specialities")]
public class SpecialityModel
{
    public virtual int Id { get; set;}
    public string Name { get; set; }
    public int Code { get; set; }
}

我希望一个从业者拥有许多专业,并希望“映射”通过代码而不是ID发生 由于有两个具有相同代码的专业,例如:Ginecology和Ginecologia“ 它们是相同的专业,代码12具有不同的ID。

这个想法是db中的数据应该如下所示:

-----------------                                        ------------------------------------------
| Practitioner |                                         |     Specialities                       |
----------------      ------------------------------     ------------------------------------------    
| Id = 10      |--   | PractitionerToSpecialities |   -- | Id = 1, Code = 12, Name = "Ginecology" | 
----------------  |  ------------------------------  |   ------------------------------------------
                   --| PracId = 10, SpecCode = 12 |----- | Id = 2, Code = 12, Name = "Ginecologia"|
                      -----------------------------      ----------------------------------------    --

有没有办法用CodeFirst来解决这个问题?

1 个答案:

答案 0 :(得分:0)

全球化不应以这种方式影响您的数据库设计。

最好只为每个专业创建一个专业记录(因此关系可以是id),然后是相应的资源(在.NET资源管理器中或在专业表中的字段中)以显示名称用不同的语言。

那说,尝试这样的事情:

[Table("Practitioners")]
public class PractitionerModel
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int Id { get; set;}

    [ForeignKey("Specialties")]
    public virtual int Code {get; set; }
    public ICollection<SpecialityModel> Specialities { get; set; }
}

[Table("Specialities")]
public class SpecialityModel
{
    public virtual int Id { get; set;}
    public string Name { get; set; }
    public int Code { get; set; }
}