标签:ef-code-first code-first entity-framework-4 c entity-framework
给定问题后面的代码,我从EF4代码优先API中收到以下错误:
The given property ‘Roles’ is not a
supported navigation property. The
property element type ‘IRole’ is
not a supported entity type.
Interface types are not supported.
基本上,我有一个类似于以下内容的存储库:
public class Repository : IRepository {
private IEntityProvider _provider;
public Repository(IEntityProvider provider) {
_provider = provider;
}
public IUser GetUser(int id) {
return _provider.FindUser(id);
}
}
请注意,IRepository.GetUser返回一个IUser.
假设我的IEntityProvider实现看起来像这样.
public class EntityProvider : IEntityProvider {
public IUser FindUser(int id) {
/* Using Entity Framework */
IUser entity;
using (var ctx = new MyDbContext()) {
entity = (from n in ctx.Users
where n.Id == id
select (IUser)n).FirstOrDefault();
}
return entity;
}
}
这里的关键是IUser界面具有List< IRole>.属性称为角色.因此,看来,Entity Framework代码优先无法确定用于满足属性所需的IRole接口的类.
以下是接口和POCO实体,它们将在整个系统中使用,并有望与EF4一起使用.
public interface IUser {
int Id { get; set; }
string Name { get; set; }
List<IRole> Roles { get; set; }
}
public interface IRole {
int Id { get; set; }
string Name { get; set; }
}
public class User : IUser {
public int Id { get; set; }
public string Name { get; set; }
public List<IRole> Roles { get; set; }
}
public class Role : IRole {
public int Id { get; set; }
public string Name { get; set; }
}
我会以错误的方式处理吗?是否可以在EF4代码优先API中执行此操作?
我只能想到以下几点:
> EF4代码优先使用的某种阴影属性(List< Role> DbRoles).然后,使用数据注释来确保实际的List< IRole>被EF4忽略.
>为EF4代码优先使用的所有实体创建重复的类,然后将它们映射到实现该接口的正式实体.
解决方法:
EF 4 Code First(从CTP5开始)不支持使用接口,RTM也可能不支持更多接口.我会说在您的DbContext中创建一个抽象类来保存您的对象.
标签:ef-code-first,code-first,entity-framework-4,c,entity-framework 来源: https://codeday.me/bug/20191208/2094117.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。