代码优先方法错误:LINQ to实体中不支持指定的类型成员“xxxxx”
为了进一步抽象我的存储库层,我尝试采用代码优先的方法,如下所述: 我在帐户和订阅实体之间存在多对多关系。每个实体上都存在指向其他实体的导航属性,例如Account.Subscriptions 在创建自己的模型之前,我使用的是实体生成的模型,以下是实体上下文:代码优先方法错误:LINQ to实体中不支持指定的类型成员“xxxxx”,linq,entity-framework,linq-to-entities,code-first,Linq,Entity Framework,Linq To Entities,Code First,为了进一步抽象我的存储库层,我尝试采用代码优先的方法,如下所述: 我在帐户和订阅实体之间存在多对多关系。每个实体上都存在指向其他实体的导航属性,例如Account.Subscriptions 在创建自己的模型之前,我使用的是实体生成的模型,以下是实体上下文: public IQueryable<Account> GetBySubscriptionId(int subId) { return from a in db.Accounts where a.Su
public IQueryable<Account> GetBySubscriptionId(int subId)
{
return from a in db.Accounts
where a.Subscriptions.Any(s => s.SubscriptionId == subId)
select a;
}
现在Account的模型如下所示:
public class Account
{
public int AccountId { get; set; }
public string Name { get; set; }
// nav properties
public virtual List<Subscription> Subscriptions { get; set; }
}
现在,当我尝试运行相同的LINQ查询时,会出现以下错误:
指定的类型成员
中不支持“订阅”
LINQ对实体的访问。只有初始化者,
实体成员和实体导航
支持属性
非常感谢您的建议。尝试将签名从
// nav properties
public virtual List<Subscription> Subscriptions { get; set; }
到
无耻地从Scott Hanselmann的演示中盗取-使用这种模式,这里还有一个Scott Guthrie的演示,使用相同的想法
列表是各种接口ICollection、IQueryable、IEnumerable等的具体实现,实体框架在从数据库检索内容时使用代理对象,因此使用虚拟声明,虚拟声明使用这些接口的不同实现,这就是错误的来源 您使用的是什么版本的代码优先?您有这两个实体的代码优先映射或配置设置吗?不使用代码优先模板,只使用代码中声明的模型样式。非常感谢。很棒的教程。
// nav properties
public virtual ICollection<Subscription> Subscriptions { get; set; }