Как привести класс таблицы EF4.1 к производному классу представления? - PullRequest
0 голосов
/ 16 июня 2011

Я использовал Entity Framework и сгенерировал edmx для моей базы данных. Сгенерированные шаблоны классов представляют каждую таблицу. У меня есть сгенерированный класс Table, из которого я скопировал 4 из его 12 свойств в новый интерфейс ITableModel.

var tables = (from t in db.Tables 
                        orderby t.DateReceived descending
                        select t).Take(100);

var list = tables.AsEnumerable().Cast<ITableModel>().ToList();

Как вы, вероятно, догадываетесь, приведение вызывает исключение invalidcast. Цель здесь - обрезать информацию, которую мне нужно передать в мои представления (MVC3), и создать классы представлений, которые представляют эту информацию. Из того, что я понял, это лучшая практика, но я против стены с этим кастингом. Любая помощь будет оценена!

1 Ответ

1 голос
/ 16 июня 2011

Если вам не нужны все данные из Таблицы, нет необходимости передавать их из базы данных.Вы можете использовать:

public class MyProjection : ITableModel
{
     public int SomeField { get; set; }
     public string SomeField2 { get; set; }
}

И вызывать ваш запрос как:

var list =  db.Tables 
              .OrderByDescending(t => t.DateReceived)
              .Take(100) 
              .Select(t => new MyProjection 
                   {
                       SomeField = t.SomeField,
                       SomeField2 = t.SomeField2
                   })
              .ToList();

Cast возможно, только если вы переопределяете оператор для приведения, но это требует конкретного типа, потому что оператор должен создать экземплярцелевого типа.

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