针对复杂类型属性的实体框架查询

时间:2017-09-08 18:47:31

标签: entity-framework linq-to-entities

在尝试对复杂类型执行OrderByDescending或Where表达式时,我遇到了Entity Framework抛出NotSupportedException的问题。我不确定我是否做错了什么,但这种能力不存在似乎相当令人惊讶。

示例:

让我们说我有一个名为Person的实体,它在数据库中有一组构成一个人地址的字段。在我的实体模型中,我会将这些字段建模为复杂类型,以便我可以

var city = person.Address.City;

映射这看起来很好,当我对复杂类型之外的任何属性进行Linq查询时,我得到了正确的结果

好例子:

var people = (from person in Context.People
              where person.LastName == "Smith"
              select person).ToList();

问题示例:

var people = (from person in Context.People
              where person.Address.City == "Cleveland"
              select person).ToList();

这会抛出NotSupportedException并出现以下错误:

  

ComplexTypes指定的类型成员'地址'不受支持   LINQ to Entities。仅初始化程序,实体成员和实体   支持导航属性。

同样,这个信息很清楚,但非常令人惊讶的是,这种能力并不存在,因为它似乎限制了使用复杂类型的能力。任何想法或解决方法?

1 个答案:

答案 0 :(得分:2)

我曾经遇到过这个问题。

确保Person.Address是可设置的。这将导致问题。好吗?

public Address Address { get; } = new Address();

这将解决它。

public Address Address { get; set; } = new Address();