Как использовать Linq в Entity Framework? - PullRequest
0 голосов
/ 28 августа 2009

Предположим, у меня есть две таблицы tab1, tab2. EF создаст файл edmx, и будут созданы две сущности.

Затем я хочу добавить компьютерный элемент в tab1, который получит некоторый результат из tab2, такой как count, sum. То, что я использовал, является частичным классом:

public partial class tab1{
   public int Count{
      get{
             int cnt;
             //...
             return cnt;
         }
   }
   public int Total{
      get{
             int total;
             //the matching sql like select sum(column) from tab2
             return total;
         }
   }
}

Я хочу, чтобы cnt - это count в tab2 (поэтому SQL должен быть выбран count (1) из tab2). Или общая сумма, которая рассчитывается из другой таблицы. Но как это реализовать? что-то вроде datacontext пока отсутствует.

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Да, есть - используйте ObjectContext ! Это ваша "точка входа во все вещи для Entity Framework.

Вы назвали его при создании EDMX - это то же имя, которое используется для строки подключения Entity Framework. Это класс в вашем файле с выделенным кодом mymodel.designer.cs для модели EDMX.

using(MyModelContext ctx = new MyModelContext())
{
   tab1 newTab = new tab1();
   // set the properties as you wish

   ctx.AddTotab1(newTab);
   ctx.SaveChanges();
}

Если ваши сущности «tab1» и «tab2» связаны в виде 1: n (одна «tab1» может иметь несколько записей «tab2»), вы найдете элемент «tab1» типа «EntityCollection» - скажем, это называется "tab2Entities".

Теперь, если вы хотите вычислить количество записей "tab2" для данного объекта "tab1", просто используйте этот код:

if(!tab2Entities.IsLoaded())
   tab2Entities.Load();

int count = tab2Entities.Count;

Это все, что есть! : -)

Марк

0 голосов
/ 28 августа 2009

Если вы пишете такие свойства самостоятельно, похоже, что вы не подключили свойства навигации каркаса сущности и сопоставления ассоциаций.

Попробуйте добавить внешний ключ в вашу базу данных между таблицами tab1 и tab2 (как бы они ни были связаны), а затем стереть файл edmx и снова импортировать все. Вы должны увидеть, что теперь есть связь между tab1 и tab2 в конструкторе структуры сущностей.

Вы могли бы тогда назвать что-то вроде:

myTab1.Tab2s.Count();

Надеюсь, это поможет - Лорен Ван Спронсен

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