Структура предприятия и DbSet

Я пытаюсь настроить универсальный интерфейс, чтобы восстановить предприятия из хранилища. Проблема состоит в том, что я должен запросить данные от обслуживания WCF, и Непатентованные средства не работают с контрактами на операцию, от того, что я вижу.

Таким образом, у меня есть это, которое работает в консольном приложении, не используя сервисное требование:

public virtual List GetAll() where T : MyBaseType
{
   return this.datacontext.Set().Include(l => l.RelationshipEntity).ToList();
}

Единственным путем я видел донг, как который это будет чем-то:

public virtual List GetAll(Type entityType)
{
   return this.datacontext.Set(entityType).Include(l => l.RelationshipEntity).ToList();
}

Set() and Set(Type type) both return a DbSet but, Set(Type type) doesn't have the extension to use ToList(), nor do I get all my results back.

, Местный , собственность только показывает контекст в пределах текущего выполнения, не, что содержится в хранилище.

Таким образом, я хочу иметь Контракт WCF как это:

[ServiceContract]
public interface IRulesService
{
     [OperationContract]
     MyBaseType Add(MyBaseType entity);

     [OperationContract]
     List GetAll(Type type);
}

Тогда внедрение:

public virtual List 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 list = new List();

    IEnumerator result = dbset.SqlQuery(sql).GetEnumerator();

    while (result.MoveNext()){
        list.Add(result.Current as MyBaseType);
    }

    return list;
}

//public virtual List GetAll() where T : MyBaseType
//{
//   return this.datacontext.Set().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) where T : MyBaseType
//{
//   this.datacontext.Set().Add(t);
//   this.datacontext.SaveChanges();
//   return t;
//}

public virtual List UpdateAll(List entities)
{

}

Какие-либо идеи лучший подход?

7
nl ja de

1 ответы

You should be able to call the Cast extension method.

public virtual List GetAll(Type entityType)
{
   return this.datacontext.Set(entityType)
       .Include(l => l.RelationshipEntity)
       .Cast() //The magic here
       .ToList();
}
0
добавлено
@Gabe можно ли разделить то, что точно вы делаете?
добавлено автор Daniel A. White, источник
.Include() на взятиях последовательность param, используя DbSet (тип) метод...
добавлено автор Gabe, источник
Кроме того, когда я пробую .Cast (MyBaseType> , я получаю исключение. не Может создать DbSet из неуниверсального DbSet для объектов типа ' MyDerivedType'.
добавлено автор Gabe, источник
Я обновил свой вопрос, сообщенный мне, если это разъясняется или если вам нужно больше информации. Я просто пытаюсь иметь универсального поставщика по wcf. Я могу сделать то использование DbSet () , но WCF doesn' t как непатентованные средства. Таким образом, я пытался достигнуть паритета с DbSet (Напечатайте тип)
добавлено автор Gabe, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot