Я пытаюсь настроить общий интерфейс для извлечения сущностей из репозитория. Проблема в том, что мне нужно запрашивать данные из службы WCF, а Generics не работают с контрактами операций, из того, что я вижу.Entity Framework и 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
Кроме того, когда я пытаюсь '.Cast (MyBaseType>' я получаю исключение. 'Не может создайте DbSet из не-общего DbSet для объектов типа «MyDerivedType». –
Gabe
@Gabe вы можете поделиться тем, что именно вы делаете? –