我目前正在开发一个 Web 服务,它提供对业务对象的基本 CRUD 操作。该服务将由当前使用直接数据库访问的遗留应用程序使用。
由于 ServiceStack 的架构很棒,我决定使用 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);
}
}
上面的示例显示了一个简单的业务对象。大多数其他人需要使用许多过滤器进行插入、更新、删除、多个连接和读取。