具有完全迁移支持的 .net Active Record ORM
Posted
技术标签:
【中文标题】具有完全迁移支持的 .net Active Record ORM【英文标题】:.net Active Record ORM with full migration support 【发布时间】:2009-09-30 23:10:33 【问题描述】:我正在寻找一个使用 Active Record 模式并允许开发人员定义将在代码中更新数据库方案的迁移的 .net OR/M。我在http://www.castleproject.org/activerecord/index.html 上看到过 ActiveRecord - 但它的文档记录很差(带有非常过时的样本),并且没有可用的生产就绪版本。我的目标 DBMS 是 MSSQLE 2008;但最好生成的 SQL 将与 MSSQL 2000 兼容。
我宁愿不使用 nHibernate,因为我知道它需要一个 XML 文件来维护方案并且不支持迁移。使用 .net 反射和属性,库在这种情况下对 XML 的使用是不可接受的,并且对于平台的一般使用来说感觉不是很原生。
我主要关心的是维护数据库方案。由于这是针对 ASP.NET MVC 项目的,因此必须能够在环境之间保持数据库方案的同步。考虑到 .net 的流行,我找不到具有内置迁移支持的单个 OR/M 的事实令人惊讶 - 正如我之前所说的,自定义属性和反射使这很容易在代码中完成。
能够在没有外部配置文件(ala ADO.NET Entity Framework)的情况下在我的实体类之外定义我的实体也是我想要避免的事情。没有理由 OR/M 不能通过在关联属性上使用自定义属性来推断列名。
无论如何,有什么建议吗?我所要求的可能不存在;如果有,是否有任何使用其他 .net OR/M 的第一手资料可以分享?
【问题讨论】:
.net 没有 activeRecord 类吗? 这是一个 6 年前的问题......不,.net 中没有内置 Active Record。您可以获得的最接近的是 Linq2Sql(已折旧,不支持迁移)或实体框架(在过去几年中确实包括迁移支持)。但这仍然是一个外部库,而不是 .net BCL 的一部分。 【参考方案1】:我宁愿不使用 nHibernate,因为 我知道它需要一个 XML 文件 维护计划
您是否查看过Fluent-NHibernate,它允许您使用流畅的 .net API 定义您的模型。
来自网站的示例:
public class CatMap : ClassMap<Cat>
public CatMap()
Id(x => x.Id);
Map(x => x.Name)
.Length(16)
.Not.Nullable();
Map(x => x.Sex);
References(x => x.Mate);
HasMany(x => x.Kittens);
(Fluent-NHibernate 也支持auto-mappings,基于约定)
NHibernate 也支持Schema Creation and Updating。 Schema Creation 是一种享受,我之前在 web 项目和内存单元测试中使用过很多次。还没有使用更新功能,因为我一直在使用 Migrator.NET 来处理这个问题。
【讨论】:
架构生成的附加链接:***.com/questions/1299373/… 有趣的想法。仍然没有我希望的那么简单。【参考方案2】:SubSonic(链接已删除)提供Migration support,并且运行良好。
【讨论】:
以上是关于具有完全迁移支持的 .net Active Record ORM的主要内容,如果未能解决你的问题,请参考以下文章
如何使用具有最小 API .Net 6 的 Asp.net core Identity 运行迁移(第一次迁移)
如何将具有联合绑定的 wcf 客户端从 .net 框架迁移到 .net 核心?
Office365混合部署实战系列教程二:制定混合部署的迁移方案