我们假设我们遇到这种情况:
数据库中的表:
Country (id, country_name), Person (id, login), CountryManager (id_country, id_person), CountryStakeholder (id_country, id_person)
如果我们必须使用Entity Framework Database-First从数据库创建模型,在VS中我们有一个类这个类:
class Country {
int id;
string country_name;
virtual ICollection<Person> Person1; // Navigation Properties
virtual ICollection<Person> Person2; // ---------||----------
}
我已经简化了很多代码,但希望你明白这一点。
似乎当Entity Framework处理外键时,它会创建通用导航属性。是否有可能控制按名称创建导航属性的方式?不幸的是,Person1,Person2不是很解释。
答案 0 :(得分:2)
在VS中,您可以使用GUI执行此操作。
如果您显示模型浏览器,则向下导航树到:
YourEntityModel&gt;实体类型&gt;国家
然后右键单击&#34; Person1&#34;导航属性并选择&#34;属性&#34;然后,您可以将导航属性名称的名称更改为您喜欢的名称:
只需更改名称,保存更改即可...
(实际上有很多方法可以进入导航属性属性窗口 - 你也可以在模型图中右键单击它)
答案 1 :(得分:0)
从条目&#34; Working with Inverse Navigation Properties&#34;来自书&#34; Programming Entity Framework: Code First&#34;:
您可以添加配置(使用数据注释或Fluent API) 将此信息提供给模型构建器。有了数据 注释,您将使用名为 InverseProperty 的注释。随着 Fluent API,您将使用Has / With方法的组合 指定这些关系的正确结束。
您可以将注释放在关系的任何一端(或 两端如果你想)。我们将它们放在导航属性上 在住宿类(例4-10)。 InverseProperty数据 注释需要相应导航属性的名称 相关的类作为参数。
示例:
[InverseProperty("PrimaryContactFor")]
public Person PrimaryContact { get; set; }
[InverseProperty("SecondaryContactFor")]
public Person SecondaryContact { get; set; }
答案 2 :(得分:0)
我建议使用https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838
它比我见过的任何数据库生成都更灵活。 我仍在努力解决自己的问题,但这看起来很有希望。但是,与EF提供的默认代码生成不同,您可以自定义映射。
就像我在重命名导航属性时看到的所有示例一样 - 仅此一项是不够的,因为EF仍然需要映射才能使用这些导航属性(你可以破解它,并拥有你的User2指向ModifiedByUser,例如)。