我正在整合许多遗留系统。它们各有不同的数据库;我需要为大多数人编写数据访问代码。
无法更改数据库模式(我可能能够应用某些索引等,但表及其列必须保留结构)。一些数据库有一个好的设计,有适当的关系和主/外键,而其他一些数据库缺乏那么多。
您会为此任务选择哪种ORM?我想在整个项目中使用相同的ORM;我的要求是:
我目前对LINQ-To-SQL有最丰富的经验;但我觉得这个项目可能是错误的选择。我愿意花一些时间学习新的框架。
答案 0 :(得分:3)
据猜测,我认为ORM可能会比你节省更多麻烦。如果您有几个不同的遗留数据库,其中一些数据库的设计很差,您可能会发现在比ORM更低的级别构建数据访问层更容易。 Fowler的Patterns of Enterprise Application Architecture在编写构建数据访问层的各种方法方面做得非常好。
某些数据访问层可能适合代码生成解决方案;然而,各种模式的存在(如你所说的一些混乱)表明,一刀切的方法可能不起作用,或者可能涉及不成比例的努力使其与所有遗留数据库很好地协作。
答案 1 :(得分:1)
nHibernate将是您最好的选择,它提供POCO支持,包括对我所知道的每个数据库的支持,并且LINQ支持绰绰有余。听起来你会想要生成你的映射文件,有mygeneration和codesmith的模板可以帮助你做到这一点并避免大量的手工工作。 (在初始生成之后,很容易调整和更改表名,关系等,这在大多数基于代的框架中更难实现)
答案 2 :(得分:0)
LINQ to SQL仅适用于SQL Server。 ADO.NET实体框架适用于ADO.NET支持的任何数据库。
我在列表中看到的唯一未实现的是该类不是POCO。特别是,在Web服务中公开其中一个是一个坏主意,因为特定于实现的数据也将被序列化。
答案 3 :(得分:0)
nHibernate符合您的大部分要求。唯一的限制是linq;然而,他们有一个由赞助商捐赠的全职开发人员,致力于为linq查询添加支持。
它支持很多数据库引擎,它是免费的,它可以使用POCO。它有很多钩子可以使各种部分可扩展。
答案 4 :(得分:0)
在我看来,最重要的因素是您是否计划实施域模型或将表直接映射到数据传输对象(DTO)。如果您要对域进行建模,那么我肯定会推荐NHibernate。如果你打算与DTO合作,那么有许多优秀的候选人,包括Entity Framework和DataTables。
答案 5 :(得分:0)
我猜你正在使用C#?
我想说可能会尝试使用SubSonic,当数据库已经存在时,这是一个很好的选择,特别是在处理商店程序和视图时。没有像nHib那样配置的xml,你可以在几个小时内启动并运行它(如果你知道你正在做什么,你可以在20分钟内运行)。它也支持几个数据库。
Linq部分我相信Rob和Co.现在正在加入,所以也可能会在那里,但那是我尚未尝试过的最新内容。