这个问题是关于 NHibernate、Subsonic、Linq2SQL 等 ORM 项目中的“最佳使用”场景......
所有这些工具都生成基本的实体类,有些带有属性,有些没有。人们是否将这些课程用作他们的业务课程?或者是否将数据从 ORM 生成的类批量复制到手动创建的业务类?
谢谢。
这个问题是关于 NHibernate、Subsonic、Linq2SQL 等 ORM 项目中的“最佳使用”场景......
所有这些工具都生成基本的实体类,有些带有属性,有些没有。人们是否将这些课程用作他们的业务课程?或者是否将数据从 ORM 生成的类批量复制到手动创建的业务类?
谢谢。
我倾向于以相反的方式工作。我按照我需要的方式创建业务对象,并创建从我的对象到数据的 NHibernate 映射。您可以让 NHibernate 根据您的映射为您生成一个模式,或者您可以创建自己的模式,并创建在两者之间的映射。Linq2Sql 和实体框架不支持这个。在这一点上,我无法与 Subsonic 交谈。
我通常创建我的业务类,并让应用程序至少部分运行,而无需任何数据库。通过这种方式,我可以更好地理解应用程序应该做什么,以及在决定如何持久化对象之前它应该如何表现。
我通常直接在业务层和表示层中使用实体。数据层定义实体,业务层操作实体或查询实体列表,表示层显示实体。
我认为创建单独的业务对象并在两者之间复制数据将是很多不必要的开销。但是如果你发现你必须这样做,我建议只包装实体而不是来回复制数据。您可以隐藏实体并使用属性来公开成员和更改行为。
SubSonic and Linq2Sql are one-to-one orm mapper. Consider the situation where the datbase is normalized. For example an employee info is broken down in 3 different tables but in your domain model you'd want only one object Employee represent the info. This is where SubSonic and Linq2Sql fail. NHibernate allows you to map your domain object to multiple tables. Also you'd want to stay away from auto generated code. NHibernate allows you to define your own POCO (Plain old C# object) domain and has different ways that allows us to map that to table(s) in database