繁体   English   中英

EF Code首先,不是第二实体的ID单向多对多关系

[英]EF Code first, unidirectional many to many relationship not by Id of second entity

这是我第一次在Stack中提出问题,而且我已经进行了很多搜索,没有任何运气。

我正在使用EF 4,我想先使用代码创建多对多关系。 我的问题是该应用程序已本地化,并且当前具有两种语言(西班牙语和英语),因此我创建了两个实体:Practitioner和Speciality:

[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。它们是同一专长,并且具有不同ID的代码12。

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

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

有什么办法可以通过CodeFirst实现这一目标?

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

最好只为每个专业创建一个专业记录(这样的关系可以通过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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM