假设我有两个表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这样的东西。
答案 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