2015-07-04 4 views
0

Предположим, я следующий кодEntity Framework метод расширения (частичный класс)

List<Common.Models.Log> logs = new MyEntities().Logs 
      .OrderByDescending(o => o.Date) 
      .Take(50) 
      .ToList(); 

в необходимости создания частичного класса «Бревна» для метода вызова, как

List<Common.Models.Log> logs = new MyEntities().Logs.TakeFirst50OrderDateDesc(); 

Im пытается создать частичный класс для вызова метода из MyEntities(). Журналы

namespace Common.DataLayers 
{ 
    public partial class Log : DbSet<Log> 
    { 
     public List<Log> TakeFirst50OrderDateDesc() 
     { 
      //blablabla 
      return new List<Log>(); 
     } 
    } 
} 

проблема заключается в том, что я не могу видеть TakeFirst50Or derDateDesc после новых MyEntities(). Журналы. Возможно ли ошибочно определить конструктор частичного класса? Как я могу это решить? Благодаря

+0

Вы уверены, что вы не ищете метод расширения в Это дело? Я не совсем уверен, можете ли вы использовать методы расширения для Generics (DbSet ), но я думаю, что вы можете –

+0

Это то, что вам нужно, это шаблон репозитория. Журнал классов не должен содержать никакой логики, это просто модель для представления данных. – Maybe

+0

Я думаю, что у вас есть право @Maybe, но что мне нужно использовать вместо DbSet для получения моей функции как метода расширения? – Sauron

ответ

0

Попробуйте использовать метод расширения как:

public static IQueryable<Log> TakeFirst50OrderDateDesc(this IQueryable<Log> top50) 
{ 
    return top50.OrderByDescending(o => o.Date) 
    .Take(50); 

} 

Вы можете получить доступ к нему, как именно можно было ожидать:

var logs = context.Logs.TakeFirst50OrderDateDesc().ToList(); 
+0

хорошо, теперь я понимаю, что для метода расширения мне нужен статический метод, а также мой частичный класс должен быть статичным. Но если я использую «public static partial class Log: DbSet « Я получаю »Статический класс« Common.DataLayers.Log »не может быть получен из типа« System.Data.Entity.DbSet ». Статические классы должны вытекают из объекта ». – Sauron

+0

Вам действительно не нужны частичные классы вообще. Просто метод расширения, я имею тенденцию иметь папку с именем Extensions, а затем поместить в нее мои методы расширения. Здесь замечательно, что вы сохраняете вещи IQueryable, так что вы можете создать практически свободный диалект: context.Logs.TakeFirst (50) .WhereLogTypeIs (LogType.Critical), тогда EF будет делать жесткий материал –

Смежные вопросы