【问题标题】:Updating model in Entity Framework removes timeout在实体框架中更新模型会消除超时
【发布时间】:2016-04-29 18:03:13
【问题描述】:

在我的数据库模型(.edmx 文件 -> mySource.Context.tt -> mySource.Context.cs)中,我已将超时设置为某个值,但是当我更新模型(从数据库更新)时,它会删除我的 ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300; 条目,因为这个文件是自动填充的。

有没有办法在我每次更新实体模型时将上述超时代码放回?

我正在考虑创建一个单元测试以在删除此代码时失败,但我宁愿更主动一些并防止它发生。

public myEntities() : base("name=myEntities")
{
    ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;     
    // Set timeout to 5 minutes
}

【问题讨论】:

    标签: c# entity-framework model-view-controller


    【解决方案1】:

    您可以更新模板mySource.Context.tt 以将该行包含在构造函数中。当您运行更新时,它基本上会运行 t4template 以生成 mySource.Context.cs 文件。

    这是帮助您确定要更新的部分的 sn-p。打开你的 mySource.Context.tt。查找下面的 sn-p 并将超时的代码行添加到我放置在 sn-p 下面的位置。

    <#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
    {
        public <#=code.Escape(container)#>()
            : base("name=<#=container.Name#>")
        {
           // Timeout setting
           ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300; 
    <#
    if (!loader.IsLazyLoadingEnabled(container))
    {
    

    【讨论】:

      【解决方案2】:

      .Context.cs 包含一个分部类。创建一个文件并从您的.Context.cs 复制这些行(名称可能不同):

      namespace Whatever
      public partial class myEntities : DbContext
      {
      }
      

      然后只需添加行来设置超时。您的文件不会被覆盖:

          public partial class myEntities : DbContext
          {
              ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
          }
      

      【讨论】:

      • 这是另一种方法。值得 +1。
      【解决方案3】:

      可以在连接字符串中配置命令超时时间;只需将“....;CommandTimeout=300;...”添加到连接字符串。我不一定会在 EF 中对其进行硬编码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        • 2017-10-22
        相关资源
        最近更新 更多