首页 新闻 搜索 专区 学院

Entity关系设计与DTO转换问题

0
悬赏园豆:20 [已关闭问题] 关闭于 2014-05-10 22:09

#这里的Entity是基于Entity Framework的Entity.

比如一个用户,有关联的角色,职位,扩展字段等信息,基于EF Code First应该如何构建它们之间的关系比较好呢,而且还要考虑后续转换成DTO的便利性(可能会用到AutoMapper来进行自动转换)?

请各位有相关经验的朋友不吝赐教^_^

目前方案:

应该算是比较直接的方式,每个Entity之间关系密切,就因为关系太紧密了,不好设计DTO,比如User,我只能按需设计DTO,查询的时候变成这样:UserBaseDTO,UserBaseWithExFieldDTO,UserBaseWithRoleDTO etc..,也许是我的想法用问题,我觉得这样相互依赖性太强了,虽然添加/删除/更新便利,但是查询就比较麻烦。

如果直接User 转换成 UserDTO(与User结构一样),这样EF的lazy loading就会导致很差很差的性能,因为导航属性会延迟加载,导致Select User -> Select Role -> Select Role.User。

而且有时候也不需要那么的数据,没必要每个关联的数据都要加载回来。

    class User
    {
        public Guid Id { get; set; }
        public string UserName { get; set; }

        public virtual IList<ExField> Fields { get; set; }
        public virtual IList<Role> Roles{ get; set; }
        public virtual IList<Position> Positions { get; set; }

    }

    class Role
    {
        public Guid Id { get; set; }
        public string Name { get; set; }

        public virtual IList<User> Users { get; set; }
    }

    class Position
    {
        public Guid Id { get; set; }
        public string Name { get; set; }

        public virtual IList<User> Users { get; set; }
    }

    class ExField
    {
        public Guid Id { get; set; }
        public string PropertyName { get; set; }

        public virtual User  User { get; set; }
    }

 

如果把User 和 Role 的关系设计成这样子:

User { Id , UserName}  Role { Id, Name}  UserRole{ Id,UserId,Role}

当设计DTO的时候就可以这样:

UserDTO { Id, UserName, #Roles} 在查询的的时候手动构建与Role的关系

RoleDTO { id, Name, #Users } 在查询的时候手动构建与User的关系

 

 

不知道哪一种方案好些,或者各位有更好的设计方案,或者谈谈各位的经验?

kaleyroy的主页 kaleyroy | 初学一级 | 园豆:160
提问于:2014-05-08 12:35
< >
分享
所有回答(1)
0

不知道楼主是如何解决的?

学亮 | 园豆:226 (菜鸟二级) | 2016-01-06 17:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册