[英]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.