这是我第一次在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来解决这个问题?
答案 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; }
}