gpt4 book ai didi

c# - ADO.NET 导航属性

转载 作者:行者123 更新时间:2023-11-30 17:20:21 26 4
gpt4 key购买 nike

我在 ADO.NET 上使用导航属性和继承时遇到一点问题。

这是我的数据模型:

ADO.NET Data Model

首先,一些词汇:

Categoria = Category
Formulario = Form
Campo = Field
Imagem = Image
Paragrafo = Paragraph
Escolha = Choice
Texto = Text
Resposta = Answer

因此,我正在尝试在返回其答案计数的表单上创建自定义属性。

正常的做法(我认为)是:

public partial class Formulario
{
public int Respostas
{
get
{
List<Item> itens = this.Itens.ToList();

IEnumerable<Campo> campos = from m in itens where m as Campo != null select (Campo)m;
int soma = campos.Sum(m => m.Respostas.Count);

return soma;
}
}
}

但它不起作用。 itens 列表返回 0 个元素。但是当我执行以下操作时,它会返回它应该返回的 4 个项目:

public partial class Formulario
{
public int Respostas
{
get
{
FormulariosDB db = new FormulariosDB();

List<Item> itens = db.Items.Where(m => m.Formulario.Id == this.Id).ToList();

IEnumerable<Campo> campos = from m in itens where m as Campo != null select (Campo)m;
int soma = campos.Sum(m => m.Respostas.Count);

return soma;
}
}
}

它仅在我实例化整个数据模型时有效。有谁知道为什么吗?

PS:我正在使用 .toList() 方法,因此我可以使用所有 Linq 查询,而不仅仅是 Linq2Entities 允许的查询我要

最佳答案

我猜您使用的是 Entity Framework 1,或者您没有在 Entity Framework 4 中启用延迟加载。

在您的类(class)中,您希望加载 Itens 集合。情况并非总是如此,因为只有在从数据库检索 Formulario 对象时明确预加载集合时才会加载集合。

您需要添加两行代码,一切都应该顺利进行:

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

List<Item> itens = Itens.ToList();

关于c# - ADO.NET 导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4215608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com