EF6通过另一个实体映射实体

时间:2017-09-23 05:00:51

标签: entity-framework entity-framework-6 model-associations

我的用户被分配到分配给特定系统活动的角色和角色:

public class User
{
    public long Id { get; set; }

    public ICollection<Role> Roles { get; set; }

    // I want this:
    public ICollection<Activity> Activities { get; set; }

    // or even better this:
    public ICollection<ActivityCode> Activities { get; set; }
}

public class Role
{
    public long Id { get; set; }

    public ICollection<Activity> Activities { get; set; }
}

public class Activity
{
    public ActivityCode Id { get; set; }
}

我希望能够直接使用用户活动,User.Activities通过User.RolesRole.Activities进行约束。

当然,我可以在代码中完成:

user.Activities = user.Roles
    .SelectMany(role => role.Activities)
    .Select(act => act.Id)
    .Distinct()
    .ToArray();

但EF6原生可能吗?

1 个答案:

答案 0 :(得分:0)

实体框架用于表示和访问域模型。域模型是构成整个模型的实体的逻辑结构。因此没有EF提供这样做的好机制。

在域对象上使用类似于存储库模式的东西更有意义,并且该存储库可能具有UserDTO,该UserDTO可以具有包含统一活动的activities属性。或者,存储库可以公开一个方法,该方法返回给定UserId的所有活动。