Eri*_*pel 2 c# asp.net refactoring entity-framework .net-3.5
我正在尝试重构一些Entity Framework代码,其中我有Product实体和产品系列,系列,品牌等相关实体.系列,系列和品牌实体都具有相同的基本结构,具有Id和Text属性.
下面的两个方法非常相似,应该可以重构为单个方法,但我不确定如何动态传递我正在查询的实体.在这种情况下,我需要能够传入db.ProductFamilies或db.ProductSeriesSet.任何想法如何使这2成为1?
谢谢!
public DTOs.ProductCollection GetFamily(int id)
{
using (Entities db = new Entities())
{
var fam = (from collection in db.ProductFamilies.Include("Product")
.Include("Product.Stuff1")
.Include("Product.Stuff2")
where collection.Id == id
select collection).FirstOrDefault();
return ProductCollectionEFToProductCollectionDTO(fam, true);
}
}
public DTOs.ProductCollection GetSeries(int id)
{
using (Entities db = new Entities())
{
var ser = (from collection in db.ProductSeriesSet.Include("Product")
.Include("Product.Stuff1")
.Include("Product.Stuff2")
where collection.Id == id
select collection).FirstOrDefault();
return ProductCollectionEFToProductCollectionDTO(ser, true);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用a Func<T, TResult>
将好的实体集合的选择委托给调用者:
public DTOs.ProductCollection Get(int id, Func<Entities, XXX> selector)
{
using (Entities db = new Entities())
{
var result = (from collection in selector(db).Include("Product")
.Include("Product.Stuff1")
.Include("Product.Stuff2")
where collection.Id == id
select collection).FirstOrDefault();
return ProductCollectionEFToProductCollectionDTO(result, true);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,XXX是的类型db.ProductFamilies
和db.ProductSeriesSet
.
然后你可以这样称呼它:
Get(42, db => db.ProductFamilies);
Get(12, db => db.ProductSeriesSet);
Run Code Online (Sandbox Code Playgroud)
它有用吗?
归档时间: |
|
查看次数: |
197 次 |
最近记录: |