如何在不添加额外表的情况下对实体框架中的属性建模n到m的关系

时间:2011-08-18 10:22:44

标签: entity-framework data-modeling ado.net-entity-data-model

我对Entity框架很陌生,我正在为这个简单的结构建模:

enter image description here

使用此模型,我所拥有的是具有属性UsersGroups(UserGroups对象的集合)的Users类。

我希望有一个Users类,其属性类似于类型为Tuple的Group或类似的东西(一个新的PriorizedGroup类等),它与bussines更相关。

这是否可以使用Entity框架?

提前致谢。

编辑:如果我对bussines对象进行建模,我会创建一个User类,其中包含一个Groups属性,该属性包含用户所属的所有组,并带有一个额外的属性来存储其优先级(带有一个元组,带有一个继承的类,就像你一样希望)。问题是我觉得Entity框架创建的对象类似于SQL结构,而不是业务结构。

1 个答案:

答案 0 :(得分:1)

不直接。 EF只能以您目前看到的方式映射关系,但您可以将自定义行为添加到实体的部分部分。简单的方法就像

public partial class Users
{
    public IEnumerable<PrioritizedGroup> Groups 
    { 
        get
        {
            return UserGroups.Select(ug => new PrioritizedGroup
                                                   {
                                                        Priority = ug.Priority,
                                                        Id = ug.Group.Id,
                                                        Name = ug.Group.Name,
                                                        Description = ug.Group.Description 
                                                   })
                             .OrderBy(g => g.Priority);
        }  
    }
}

要直接在EF中实现这一点,您需要一些高级映射技术,这需要您直接修改EDMX源代码(DefiningQuery或QueryView),它将使实体只读(您需要存储过程进行修改)。

要在可更新的用户上公开集合,您可能需要使用ObservableCollection并将ObservableCollection触发的所有修改转移回原始UserGroups集合。一旦你有类似的东西实现you can hide original collection