2

这是我第一次在 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”它们是相同的专业,并且具有不同 ID 的代码 12。

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

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

有没有办法通过 CodeFirst 实现这一目标?

4

1 回答 1

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; }
}
于 2013-11-08T13:58:31.043 回答