如何在实体框架中使用Linq?

时间:2009-08-28 14:09:51

标签: entity-framework

假设我有两个表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是tab2中的计数(因此SQL应该从tab2中选择count(1))。或者从另一个表计算的总数。 但是如何实现呢?还没有像datacontext这样的东西。

2 个答案:

答案 0 :(得分:2)

是的 - 使用 ObjectContext !这是您“实体框架的所有内容的切入点。

您在创建EDMX时将其命名 - 它与您的Entity Framework连接字符串使用的名称相同。它是EDMX模型的“mymodel.designer.cs”代码隐藏文件中的一个类。

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”条目),您将找到类型为“EntityCollection”的“tab1”成员 - 让我们说这叫做“tab2Entities”。

现在,如果您想计算给定“tab1”对象的“tab2”条目数,请使用以下代码:

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

int count = tab2Entities.Count;

这就是全部! : - )

马克

答案 1 :(得分:0)

如果您自己编写这些类型的属性,听起来您没有操纵实体框架导航属性和关联映射。

尝试在tab1和tab2表之间向数据库添加外键(但它们是相关的),然后擦除edmx文件并再次导入整个内容。您应该看到实体框架设计器中的tab1和tab2之间现在存在关联。

然后你可以调用类似的东西:

myTab1.Tab2s.Count();

希望这会有所帮助 - Loren Van Spronsen