Próbuję skonfigurować ogólny interfejs do pobierania elementów z repozytorium. Problem polega na tym, że muszę zażądać danych z usługi WCF, a produkty Generics nie działają z umowami operacyjnymi, z tego, co widzę.Entity Framework i DbSet
Mam więc ten, który działa w aplikacji konsoli, nie używając połączenia serwisowego:
public virtual List<T> GetAll<T>() where T : MyBaseType
{
return this.datacontext.Set<T>().Include(l => l.RelationshipEntity).ToList();
}
jedynym sposobem mogłem zobaczyć dong to byłoby coś takiego:
public virtual List<MyBaseType> GetAll(Type entityType)
{
return this.datacontext.Set(entityType).Include(l => l.RelationshipEntity).ToList();
}
Set<T>()
i Set(Type type)
zarówno zwracają numer DbSet
, ale Set(Type type)
nie ma rozszerzenia do używania ToList()
, ani nie otrzymam wszystkich moich wyników z powrotem.
Właściwość Local
pokazuje tylko kontekst w zakresie bieżącego wykonania, a nie zawartość repozytorium.
Więc chcę mieć umowę WCF tak:
[ServiceContract]
public interface IRulesService
{
[OperationContract]
MyBaseType Add(MyBaseType entity);
[OperationContract]
List<MyBaseType> GetAll(Type type);
}
Następnie realizację:
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)
{
}
jakieś pomysły najlepszy podejście?
'.Include()' na bierze param ciąg przy korzystaniu z 'DbSet (typ)' metody ... – Gabe
Ponadto, gdy próbuję '.Cast (MyBaseType>' uzyskać wyjątek. 'Nie można utworzyć DbSet z nietypowego DbSet dla obiektów typu "MyDerivedType". –
Gabe
@ Gabe możesz podzielić się tym, co akurat robisz? –