【问题标题】:Set UseDatabaseNullSemantics for generated DbContext EF6为生成的 DbContext EF6 设置 UseDatabaseNullSemantics
【发布时间】:2018-08-04 02:23:44
【问题描述】:

我有一个 EF6 DbContext,它是从我想将 UseDatabaseNullSemantics 设置为 true 的模型自动生成的。

我不想在 DbContext 的每个实例上设置 UseDatabaseNullSemantics 的值(这意味着很多代码),因为它是生成的,所以我不能在 DbContext 的构造函数中设置 UseDatabaseNullSemantics 的值。

我有没有办法一劳永逸地将应用程序的 UseDatabaseNullSemantics 设置为 true?

编辑+澄清:

我的“FordonTrpEntities”DbContext 子类是自动生成的,位于“FordontTrp.edmx”模型文件中/下。

如果我在此类的构造函数中设置配置,如果/当文件重新生成时,它不会被删除吗?如文件头所述:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Manual changes to this file may cause unexpected behavior in your application.
//     Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
public partial class FordonTrpEntities : DbContext
{
    public FordonTrpEntities()
        : base("name=FordonTrpEntities")
    {
        Configuration.UseDatabaseNullSemantics = true;
    }

【问题讨论】:

  • 希望您了解此设置的影响。它可能会产生意想不到的结果。

标签: c# entity-framework


【解决方案1】:

是的,你必须像这样在 DbContext 类的构造函数中设置它:

public class YourDbContext : DbContext 
{
     public YourDbContext() 
     {
          Configuration.UseDatabaseNullSemantics = true;
     }

     // DbSet declarations
}

您会注意到,在大多数有过滤器的查询中,性能有了巨大的提升,因为它不会向条件添加空检查。

如果您正在使用自动生成的代码,则不能直接修改此类,因为它将被覆盖。在这种情况下,您可以修改 TT 文件。

【讨论】:

  • 感谢您的回答!我已经澄清了我的问题。你的回答还有效吗?您知道文件何时/可以重新生成吗?
  • @x3m 不要直接修改 CS 文件,它会被覆盖。但是这个答案仍然是正确的。可以而且应该在 TT 文件中进行相同的更改。
  • @hvd 太好了!正如您所指出的,我通过修改 TT 文件使其工作。弗朗西斯科,如果您修改答案以便提及 TT 文件,我可以批准它! :)
  • 我为 TT 文件添加了额外的注释。
猜你喜欢
  • 1970-01-01
  • 2019-05-06
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多