多表查询的实体类怎么设计?

ayun00 2016-05-08 12:12:54
在传统的三层架构中 , 一般entity层的属性字段都和数据库字段一致(至少我接触的是这样) ,如果有父子关系 就多一个 list

但是现在的业务经常要多表查询 , 每次查询需要的字段都不一样 ,
这样需要在entity层中 在单独写一个 entity类 来对应这次的查询吗, 然后每次手工去给每个字段赋值?(ps:如果是和数据库一一对应的话, 有很多代码生成工具能用)

请问大神们是怎么解决的?
1.老老实实的写实体类 ,然后写对应的 属性赋值类?(想想 , 那么多属性要去手工写代码, 还要担心敲错字母, 就感觉恐怖 )
2. 丢一个 datarow给 业务层, 让业务层去 创建一个 匿名类? (不能用强类型的提示, 好悲伤...)
...全文
1761 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码-小子 2019-11-01
  • 打赏
  • 举报
回复
[align=center]
[/align]
我是飞云 2016-05-08
  • 打赏
  • 举报
回复
EF生成的时候如果有用到“关系”的话,会生成一个集合属性。 如果是自己写一个DLL,那就老老实实的填充。 建议使用数据转实体,然后将对象赋值到这个属性。
ayun00 2016-05-08
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
思想意识上的问题,不要因为看似说起来非常简单就轻视它,它并不容易像某些代码或者流行的UI 框架那样去现学现卖。要接受一个思想意识上的改变并且全盘应用到自己的设计中,需要至少3年以上时间。但是你可以从理论来看明白,不同人对于“三层”概念的出发点,有着多么大的不同。完全是“一个天上一个地下”的两极的不同。
你的意思 换句话说 就是 codefrist?
  • 打赏
  • 举报
回复
思想意识上的问题,不要因为看似说起来非常简单就轻视它,它并不容易像某些代码或者流行的UI 框架那样去现学现卖。要接受一个思想意识上的改变并且全盘应用到自己的设计中,需要至少3年以上时间。但是你可以从理论来看明白,不同人对于“三层”概念的出发点,有着多么大的不同。完全是“一个天上一个地下”的两极的不同。
  • 打赏
  • 举报
回复
如果你站在“发展”的角度看设计,你会看到 Model 总是不断翻新的。可能某一个 BLL 服务所输入输出的 Model,实际上在后台数据库里涉及到8个数据表,甚至涉及到多个系统的SOA架构,甚至有些根本就是内存里的缓存着的统计汇总表结果(因为重复查询相同条件的统计结果,所以缓存)而并不是数据库系统中的表。 假设一个比较复杂的、面对多种多样前端的企业业务系统有 400 个Model,那么数据表不过就只有180个表。业务用的 Model 的数量往往远大于数据库数据表的数量。这说明业务层比较成熟,可以处理各种扩大或者缩小范围的高性能前端访问,其反应的业务服务功能是面向前端需求的,而不是简单地面向“增删改查”的。
  • 打赏
  • 举报
回复
三层结构,其 Model 的设计当然是首先从前端应用需求出发的,而不是从什么数据库表出发的。在业务逻辑层,它将 Model 中的数据通过 DAL api 方法写入数据库、或者查询数据库,它自然就有一个转换。 假设你的 DAL 方法,或者上述 BLL 方法,是将某个与数据库表对应的 Model(或者其集合)写入数据库,这并不代表着 BLL 面对表现层的 Model 就只能纠结于数据库表。 相反地,满脑子只有“增删改查”的人缺乏表现层设计创意,一遇到千奇百怪的 UI 变化需求就怂了,就不知道如何设计“三层”程序了。这就是因为理念错误造成的。
我是飞云 2016-05-08
  • 打赏
  • 举报
回复
引用 2 楼 ayun00 的回复:
[quote=引用 1 楼 feiyun_Web 的回复:] EF生成的时候如果有用到“关系”的话,会生成一个集合属性。 如果是自己写一个DLL,那就老老实实的填充。 建议使用数据转实体,然后将对象赋值到这个属性。
对每个业务都创建一个实体类?[/quote] 应该说每个表创建一个实体,然后将可能的关系表带入。比如说下面这个类

    public partial class UF_Admin
    {
        /// <summary>
        /// 管理员ID
        /// </summary>
        public int ID { get; set; }

        /// <summary>
        /// 管理者帐号
        /// </summary>
        [Required]
        [StringLength(30)]
        public string Username { get; set; }

        /// <summary>
        /// 管理员角色
        /// </summary>
        public IList<int> RolesList { get; set; }

        /// <summary>
        /// 管理员的权限代码
        /// </summary>
        public IList<string> OperateCodeList { get; set; }
ayun00 2016-05-08
  • 打赏
  • 举报
回复
引用 1 楼 feiyun_Web 的回复:
EF生成的时候如果有用到“关系”的话,会生成一个集合属性。 如果是自己写一个DLL,那就老老实实的填充。 建议使用数据转实体,然后将对象赋值到这个属性。
对每个业务都创建一个实体类?
课程通过实际项目融入常用开发技术架构,讲授风格独特,提供详细上课日志及答疑,赠送配套的项目架构源码注释详细清晰且表达通俗,均能直接在实际项目中应用,正真的物超所值,价格实惠任务作业:综合运用《C#/.Net企业级系统架构设计实战精讲教程》课程所学知识技能设计一个学生成绩管理系统的架构。要求:1.系统基于MVC的三层架构,各层单独建不同的解决方案文件夹。2.采用Model First开发方式,设计架构时只需要设计学生表(TbStudent)和课程表(TbCourse)。学生表必须有的字段是ID、stuName、age;课程表必须有的字段是ID、courseName、content。3.数据访问层采用Entity Framework或NHibernate来实现,必须封装对上述表的增删改查方法。4.必须依赖接口编程,也就是必须要有数据访问层的接口层、业务逻辑层的接口层等接口层。层层之间必须减少依赖,可以通过简单工厂或抽象工厂。5.至少采用简单工厂、抽象工厂、Spring.Net等技术中的2种来减少层与层之间的依赖等。6.封装出DbSession类,让它拥有所有Dal层实例和SaveChanges方法。7.设计出数据访问层及业务逻辑层主要类的T4模板,以便实体增加时自动生成相应的类。8.表现层要设计相关的控制器和视图来验证设计的系统架构代码的正确性,必须含有验证增删改查的方法。9.开发平台一定要是Visual Studio平台,采用C#开发语言,数据库为SQL Server。10.提交整个系统架构的源文件及生成的数据库文件。(注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧