7
我想設置一個通用接口來從存儲庫檢索實體。 問題是我需要從WCF服務請求數據,而泛型不能與操作契約一起使用,從我所看到的情況來看。實體框架和DbSet
所以我這裏面的一個控制檯應用程序,工作不使用服務電話:
public virtual List<T> GetAll<T>() where T : MyBaseType
{
return this.datacontext.Set<T>().Include(l => l.RelationshipEntity).ToList();
}
我可以看到洞的唯一方法,這將是這樣的:
public virtual List<MyBaseType> GetAll(Type entityType)
{
return this.datacontext.Set(entityType).Include(l => l.RelationshipEntity).ToList();
}
Set<T>()
和Set(Type type)
都返回DbSet
,但是,Set(Type type)
沒有擴展名使用ToList()
,也沒有得到我所有的結果。
Local
屬性僅顯示當前執行範圍內的上下文,而不顯示存儲庫中包含的內容。
所以我希望有一個WCF合同是這樣的:
[ServiceContract]
public interface IRulesService
{
[OperationContract]
MyBaseType Add(MyBaseType entity);
[OperationContract]
List<MyBaseType> GetAll(Type type);
}
然後執行:
public virtual List<MyBaseType> GetAll(Type entityType)
{
var dbset = this.datacontext.Set(entityType);
string sql = String.Format("select * from {0}s", type.Name);
Type listType = typeof(List<>).MakeGenericType(entityType);
List<MyBaseType> list = new List<MyBaseType>();
IEnumerator result = dbset.SqlQuery(sql).GetEnumerator();
while (result.MoveNext()){
list.Add(result.Current as MyBaseType);
}
return list;
}
//public virtual List<T> GetAll<T>() where T : MyBaseType
//{
// return this.datacontext.Set<T>().Include(l => l.RelationshipEntity).ToList();
//}
public virtual MyBaseType Add(MyBaseType entity)
{
DbSet set = this.datacontext.Set(typeof(entity));
set.Add(entity);
this.datacontext.SaveChanges();
return entity;
}
//public virtual T Add<T>(T t) where T : MyBaseType
//{
// this.datacontext.Set<T>().Add(t);
// this.datacontext.SaveChanges();
// return t;
//}
public virtual List<MyBaseType> UpdateAll(List<MyBaseType> entities)
{
}
任何想法的最佳方法?
'.INCLUDE()'使用'DbSet(型)'方法... – Gabe 2013-02-25 16:17:40
時也上需要一個字符串PARAM,當我嘗試'.Cast(MyBaseType>'我得到一個異常。'無法從非泛型DbSet爲'MyDerivedType'類型的對象創建一個DbSet.' –
Gabe
2013-02-25 16:19:02
@Gabe你能分享一下你到底在幹什麼嗎? – 2013-02-25 16:21:02