我正在使用Database First和Entity Framework 5.我们有两个表(大规模简化):
当我们使用Visual Studio将数据库导入EF("从数据库更新模型")时,我们最终得到如下代码:
Customer myCustomer;
var a = myCustomer.Address;
var b = myCustomer.Address1;
var c = myCustomer.Address2;
Run Code Online (Sandbox Code Playgroud)
我想要的显然是这样的:
var a = myCustomer.BillingAddress;
var z = myCustomer.BillingAddress.Street; // etc.
Run Code Online (Sandbox Code Playgroud)
我可以在设计器中编辑模型,更改导航属性以给我正确的名称.但是,这不是一个可行的解决方案,因为我们每次更改数据库时都会重建模型.
我尝试过的一个选项是创建一个像这样的部分类(从现有的MyModel.Designer.cs复制的代码,只更改了属性名):
public partial class Customer : EntityObject
{
[EdmRelationshipNavigationPropertyAttribute("MyModel", "FK_Customers_Addresses_BillingAddress", "Address")]
public Address BillingAddress
{
get {
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<LookupItem>("MyModel.FK_Customers_Addresses_BillingAddress", "Address").Value;
}
set {
((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<LookupItem>("MyModel.FK_Customers_Addresses_BillingAddress", "Address").Value = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到以下错误:
概念类型"MyModel.Customer"中的成员数与对象端类型"MyNamespace.DataModel.Customer"上的成员数不匹配.确保成员数量相同.
我已经尝试使用[NotMapped()]属性,但这没有任何区别.如果我删除[EdmRelationshipNavigationPropertyAttribute ...]属性,那么Linq会抱怨以下错误:
LINQ to Entities不支持指定的类型成员'BillingAddress'.仅支持初始值设定项,实体成员和实体导航属性.
有没有其他方法可以在Customers对象中实现有意义的名称?
这就是我最终想要的东西:
var …Run Code Online (Sandbox Code Playgroud)