似乎有很多的例子在实施库模式的LINQ到SQL。 他们大多设有IRepository和DI的; 一些已经实施工作的单位,有些不是。 我试图读取大多数通过SO和谷歌上搜索的Linq返回到SQL存储库模式的结果。 不过我还没有碰到过一个完整的解决方案呢。
从我读,我实现了一个存储库模式,如下图所示:
我使用DI登记在其上存储库依赖接口:
this.container.RegisterType<IConnectionStringFactory, ConnectionStringFactory>(new ContainerControlledLifetimeManager(),
new InjectionConstructor(connectionString));
this.container.RegisterType<IDataContextFactory, DataContextFactory>();
Repository模式的实施情况:
public interface IPrivilegeRepository : IRepository<PrivilegesEntity>
{
IList<MenuModel> GetRootMenu();
IList<MenuModel> GetChildMenu(int parentId);
}
public class PrivilegeRepository : Repository<PrivilegesEntity>, IPrivilegeRepository
{
#region IPrivilegeRepository Members
public IList<MenuModel> GetRootMenu()
{
return FindAll(menu => menu.ParentId == null)
.OrderBy(menu => menu.SortOrder)
.Select(c => EntityMapper.Privileges.ToBusinessObject(c))
.ToList();
}
public IList<MenuModel> GetChildMenu(int parentId)
{
return FindAll(menu => menu.ParentId == parentId)
.OrderBy(menu => menu.SortOrder)
.Select(menu => EntityMapper.Privileges.ToBusinessObject(menu))
.ToList();
}
#endregion
public PrivilegeRepository(IDataContextFactory dataContextFactory)
: base(dataContextFactory)
{
}
}
IRepository泛型接口:
public interface IRepository<T> where T : class
{
IEnumerable<T> All();
IEnumerable<T> FindAll(Expression<Func<T, bool>> exp);
T Single(Expression<Func<T, bool>> exp);
T First(Expression<Func<T, bool>> exp);
}
repository类被实现,如下面IRepository(未示出)的实施方式和正对IDataContextFactory依赖性其中DI正在的护理:
public class Repository<T> : IRepository<T> where T : class
{
public Repository(IDataContextFactory dataContextFactory)
{
this.dataContextFactory = dataContextFactory;
}
}
库使用IoC的消耗:
PrivilegeRepository repository = container.Resolve<PrivilegeRepository>();
我为了返回的查询结果作为业务对象的集合,以避免依赖的LINQ到SQL在哪里我消耗储存库应用程序层。 上述情况正常工作与使用MVVM模式我的WPF应用程序。 我有不依赖通过的LINQ SQL生成的类视图模型AKS演示课。
如何延长这种模式让我可以将数据保存到数据库中。 我想通过Business Objects的回库,并让他们保存。 可能吗? 我怎么能在这种情况下实施工作的单位。