【发布时间】:2010-10-28 15:54:09
【问题描述】:
现在,我正在通过 Sanderson 的“Pro ASP.Net MVC 2 Framework”一书(第 107 页)的 SportsStore 练习,该练习让我使用 LINQ-to- 实现由数据库存储支持的存储库模式SQL。我正在尝试弄清楚如何使用 Subsonic ORM 实现相同的存储库。
基本仓库代码如下:
using System.Data.Linq;
namespace DomainModel.Concrete
{
public class SqlProductsRepository : IProductsRepository
{
private Table<Product> productsTable;
public SqlProductsRepository(string connectionString)
{
productsTable =
(new DataContext(connectionString)).GetTable<Product>();
}
public IQueryable<Product> Products
{
get { return productsTable; }
}
}
}
我认为,代码中特定于 LINQ-To-SQL 的部分是涉及 DataContext 和 GetTable 的那一行。
Subsonic 有类似的机制吗?如果是这样,
- 代码是什么样的?
- 我能否使用 System.Data.Linq 表中提供的方法,例如:
- InsertOnSubmit()
- 附加()
- DeleteOnSubmit()
- 提交更改()
- 等
更新 收到你的消息。令人印象深刻的模板,但我决定先尝试一些更简单的东西:
using SubSonic.Repository;
namespace DomainModel.Concrete
{
public class SqlProductsRepository : IProductsRepository
{
private SimpleRepository repo;
private IQueryable<Product> products;
public IQueryable<Product> Products
{
get { return products; }
}
public DbProductsRepository(string subsonicDatastore)
{
repo = new SimpleRepository(subsonicDatastore, SimpleRepositoryOptions.RunMigrations);
this.Refresh();
}
public void SaveProduct(Product product) { SaveProduct(new List<Product>() { product }); }
public void SaveProduct(IEnumerable<Product> productList)
{
var newProducts = from product in productList
where product.ID == 0
select product;
var oldProducts = from product in productList
where product.ID > 0
select product;
// If it's a new Product, just add it to the Repo
repo.AddMany<Product>(newProducts);
// If it's old, just update it.
repo.UpdateMany<Product>(oldProducts);
// Refresh internal list of products, in case table has changed.
this.Refresh();
}
public void DeleteProduct(Product product) { DeleteProduct(new List<Product>() { product }); }
public void DeleteProduct(IEnumerable<Product> productList)
{
repo.DeleteMany<Product>(productList);
this.Refresh();
}
private void Refresh()
{
products = repo.All<Product>();
}
}
}
据我所知,DataContext 没有直接替代品,但还有其他同样简单的选项。
当我有更多时间时,我仍然计划检查您的解决方案。它看起来更复杂,但更灵活/适应性更强。
谢谢!
【问题讨论】:
标签: asp.net-mvc linq-to-sql subsonic subsonic3 datacontext