我在使用Entity Framework 5的Database First。我们有两个表(大量简化):
地址(Addresses) -街道(Street) -城镇等
客户(Customers) -姓名(Name) -账单地址(BillingAddress) -交货地址(DeliveryAddress) -备用送货地址(AltDeliveryAddress)
当我们使用Visual Studio将数据库导入到EF(“从数据库更新模型”)时,我们得到如下代码:
我希望你能够提供如下内容:
然而,当我运行时,出现以下错误:
下面是最终想要实现的效果:
地址(Addresses) -街道(Street) -城镇等
客户(Customers) -姓名(Name) -账单地址(BillingAddress) -交货地址(DeliveryAddress) -备用送货地址(AltDeliveryAddress)
当我们使用Visual Studio将数据库导入到EF(“从数据库更新模型”)时,我们得到如下代码:
Customer myCustomer;
var a = myCustomer.Address;
var b = myCustomer.Address1;
var c = myCustomer.Address2;
我希望你能够提供如下内容:
var a = myCustomer.BillingAddress;
var z = myCustomer.BillingAddress.Street; // etc.
我可以在设计师中编辑模型,更改导航属性以获得正确的名称。然而,这并不是可行的解决方案,因为我们每次对数据库进行更改时都需要重新构建模型。
我尝试过的一种选择是创建一个部分类,像这样(代码从现有的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;
}
}
}
然而,当我运行时,出现以下错误:
我尝试使用 [NotMapped()] 属性,但没有任何区别。如果我删除 [EdmRelationshipNavigationPropertyAttribute...] 属性,则 Linq 会报以下错误:概念类型“MyModel.Customer”的成员数与对象侧类型“MyNamespace.DataModel.Customer”的成员数不匹配。确保成员数量相同。
有没有其他方法可以在 Customers 对象中实现有意义的名称?指定的类型成员“BillingAddress”在 LINQ to Entities 中不受支持。只支持初始化项、实体成员和实体导航属性。
下面是最终想要实现的效果:
var j = myCustomer.BillingAddress;
var k = myCustomer.BillingAddress.Street;
var l = myCustomer.BillingAddress.Town; // etc.