[英]Which ORM should I use together with ServiceStack and an existing database
我目前正在开发一个Web服务,它提供对业务对象的基本CRUD操作。 该服务将由当前使用直接数据库访问的遗留应用程序使用。
由于ServiceStacks的优秀架构,我决定使用ServiceStack而不是WCF。
但是知道我正在尝试使用OrmLite,nHibernate或Entity Framework来访问现有的遗留数据库。
ORM的要求如下
我已经尝试过OrmLite(因为它很快并且已经包含在ServiceStack中)。 我设法加入两个表的唯一方法是使用SQL(不是一个选项)。 有没有更好的方法?
// @stackoverflow: This is my POCO DTO
public class Country
{
public long Id { get; set; }
public string Alpha2 { get; set; }
public string Alpha3 { get; set; }
public string ShortText { get; set; }
public string LongText { get; set; }
}
public class CountryRepository : ICountryRepository
{
// @stackoverflow: This is the query to join countries with translated names stored in another table
private const string CountriesSql =
@"SELECT C.Id, C.Alpha2, C.Alpha3, L.ShortText, L.LongText FROM COUNTRY AS C INNER JOIN LOCALIZATION AS L ON C.LocId = L.Id WHERE (L.Lang_Id = {0})";
private const string CountrySql = CountriesSql + " AND C.Id={2}";
private IDbConnection db;
public IDbConnectionFactory DbFactory { get; set; }
private IDbConnection Db
{
get { return db ?? (db = DbFactory.Open()); }
}
public List<Country> GetAll()
{
return Db.Select<Country>(CountriesSql, 0);
}
public Country GetById(long id)
{
return Db.SingleOrDefault<Country>(CountrySql, 0, id);
}
}
上面的示例显示了一个简单的业务对象。 大多数其他需要插入,更新,删除,多个连接和许多过滤器读取。
如果你需要的只是加入(延迟加载或急切加载)和存储过程支持,并希望快速安装,那么Entity Framework和nHibernate是很好的选择。 这是一个关于EntityFramework以及存储库和工作单元模式的很酷的链接。 http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx
如果您非常关注性能并希望更好地控制类的外观(即POCO )和行为,那么您可以尝试更轻量级的东西,如ORMLite或Dapper。 这两个只是具有较少功能的瘦包装器,但它们将为您提供最佳性能和最大灵活性 - 即使这意味着每隔一段时间写一些SQL。
您也可以使用混合方法。 不要害怕混搭。 使用POCO时这将是最简单的。
我认为重要的是为您当前的数据库和当前需求编写代码 。 但是,要使用适当的接口这样做,所以如果要切换到不同的数据库或存储机制,那么您只需创建一个新的数据提供程序并将其插入。
Ormlite使用表达式支持原始Join函数。 新的JoinSqlBuilder类可以帮助解决这个问题。 对于SP,我添加了一个新的T4文件来生成相应的c#函数。 目前SP生成代码仅支持Sql Server; 如果您正在使用任何其他数据库,则可以轻松添加对其的支持。
您可能会考虑LLBLGen Pro - 它对数据库优先设计有很好的支持,并且还有设计器工具,如果您使用nHibernate或EF,它们可以加快入门。 但它是$$。 http://llblgen.com
作为对此的跟进,Matt Cowan创建了一个AWESOME模板生成器,用于使用LLBLGen构建此类事物。 在这里查看博客文章:
http://www.mattjcowan.com/funcoding/2013/03/10/rest-api-with-llblgen-and-servicestack/
和演示在这里:
http://northwind.mattjcowan.com/
该演示完全自动生成!
另请参阅NHibernate 3.x和Entity Framework 5/6之间的OO视角比较http://www.dennisdoomen.net/2013/03/entity-framework-56-vs-nhibernate-3.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.