提问人:Kristijan 提问时间:10/20/2023 更新时间:10/20/2023 访问量:40
实体框架导航属性为 null(使用 T4),但如果使用旧版 ObjectContext,则具有值
Entity Framework navigation property is null(using T4) but has a value if using Legacy ObjectContext
问:
我们使用数据库优先的方法。我们重写了使用 Oracle 和 Legacy ObjectContext 代码生成策略的旧系统,并将 T4 和 Mysql 作为数据库。 由于MS Forms的数据绑定,我们遵循了Microsoft指南,将ICollections更改为ObservableListSource。
我们现在遇到的问题是,下面的代码可以按预期在“旧 Oracle”系统中工作,但在我们的新 T4 Mysql 中却不能。 因此,我们遇到的问题是,在我们将新对象添加到列表后,导航属性应该有一个值而不是 null。 延迟加载已打开。
ORACLE 代码:传统
S_SUMREPORT rep = (S_SUMREPORT)s_SUMREPORTBindingSource.DataSource;
var emails = databaseEntities.S_SUB_CONTACT.Where(p => p.FK_SUB.Equals('code'));
if (emails != null)
{
foreach (S_SUBCLIPPING_CONTACT c in emails)
{
S_SUMREPORT_CONTACT contact = new S_SUMREPORT_CONTACT();
contact.FK_EXP_TEMPLATE = c.FK_EXP_TEMPLATE;
rep.S_SUMREPORT_CONTACT.Add(contact);
////now the call to navigation property S_EXP_TEMPLATE is NOT null!
bool IsActive = contact.S_EXP_TEMPLATE.ACTIVE;
}
}
MYSQL T4 代码
S_SUMREPORT rep = (S_SUMREPORT)s_SUMREPORTBindingSource.DataSource;
var emails = databaseEntities.S_SUB_CONTACT.Where(p => p.FK_SUB.Equals('code'));
if (emails != null)
{
foreach (S_SUBCLIPPING_CONTACT c in emails)
{
S_SUMREPORT_CONTACT contact = databaseEntities.S_SUMREPORT_CONTACT.Create();
contact.FK_EXP_TEMPLATE = c.FK_EXP_TEMPLATE;
rep.S_SUMREPORT_CONTACT.Add(contact);
////now the call to navigation property S_EXP_TEMPLATE IS null!
bool IsActive = contact.S_EXP_TEMPLATE.ACTIVE;
}
}
我们的结果: 在 oracle 中,呼叫联系。S_EXP_TEMPLATE在调试器中将有一个值,甚至没有执行调用 在 Mysql 中,呼叫联系。S_EXP_TEMPLATE 为 null,除非我们调用 databaseEntities.Entry(contact)。否则致电联系人。S_EXP_TEMPLATE。ACTIVE 引发 null 指针异常。
注意: 具有旧版 ObjectContext 代码生成器的 Oracle 正在创建 EntityCollection,其中 T4 正在为导航属性创建 ObservableListSource。 我们的联系人是 DynamicProxy
我不知道当我不想存储某些内容但想立即使用它们时,向 dbContext(这是我们的 databaseEntities)添加某些内容的“正确”方法是什么。
基本上,我们有一个带有电子邮件的简单表单,对于这些电子邮件,您可以根据导出模板生成pdf,如果pdf成功,则保存更改。
但正如我之前所说,导航属性只有在将其添加到列表(rep.S_SUMREPORT_CONTACT。Add(contact)) 我们调用 databaseEntities.Entry(contact)
这应该像这样工作吗?我读到,是的,该值为 null,但由于延迟加载,该值将成为某种东西,而不是保持 null。
谢谢。
答: 暂无答案
评论