我知道我可以通过将所有内容推送到单个实体而不是嵌套复杂类型(因为它们只是1-1映射)来解决这个问题,但我喜欢它在生成的OM中对属性进行分组的方式。
我有一个包含Complext类型“CrmData”的Customer实体。 CrmData实体具有复杂类型的地址。
public class Customer {
[Required]
public CrmSpecificData CrmData { get; set; }
}
[ComplexType]
public class CrmSpecificData {
[MaxLength(40)]
public string FirstName { get; set; }
[MaxLength(80)]
public string LastName { get; set; }
public Address Address { get; set; }
}
[ComplexType]
public class Address {
[MaxLength(150)]
public string Address1 { get; set; }
[MaxLength(150)]
public string Address2 { get; set; }
[MaxLength(100)]
public string City { get; set; }
[MaxLength(15)]
public string PostalCode { get; set; }
public StateProvince StateOrProvince { get; set; }
public virtual CountryRegion CountryOrRegion { get; set; }
}
StateProvince& CountryRegion类型是我的数据库中的实体(类似于AdventureWorks示例数据库的工作方式)。问题是,当EF尝试创建模型时,它会失败并显示:
“MyCo.Crm.Entities.StateProvince”类型已经配置为实体类型。它不能重新配置为复杂类型..
我试过让StateProvince成为一个复杂的类型,但这并没有解决问题。想法?
public class StateProvince {
[Key]
public int StateProvinceId { get; set; }
[MaxLength(3)]
public string StateProvinceCode { get; set; }
[MaxLength(50)]
public string Name { get; set; }
}
答案 0 :(得分:14)
复杂类型cannot contain navigation properties。导航属性只能在实体中定义。所以你必须: