ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

我可以使用并返回EF4代码优先POCO实体作为其接口吗?

2019-12-08 20:14:52  阅读:295  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有