【问题标题】:How can I set Entity Framework CommandTimeout in AutoGenerated Edmx file如何在自动生成的 Edmx 文件中设置实体框架 CommandTimeout
【发布时间】:2016-04-01 16:03:39
【问题描述】:

我们使用 EF6 作为 DB First,模型和 edmx 文件是使用 .tt 模板生成的。

现在我们需要设置命令超时,这很简单

Partial Public Class ReservingEntities
Inherits DbContext

Public Sub New()
    MyBase.New("name=ReservingEntities")
    Database.CommandTimeout = 0
End Sub

但问题是每次我们从数据库中更新 EF 时,Database.CommandTimeout = 0 行都会被删除,因为类是从模板构造的。

您能否建议设置超时以使其保持不变的正确位置?

【问题讨论】:

  • 您可以编辑T4模板并在那里添加您的代码。

标签: c# .net vb.net entity-framework visual-studio


【解决方案1】:

您可以使用以下任一选项:

  • 您可以自定义当前项目的t4 模板。

  • 您还可以为实体框架编辑 Visual Studio 模板。然后,您使用“添加新项”窗口添加到项目中的每个 edmx,选择 ADO.NET 实体数据模型,都将使用修改后的模板。

为当前项目自定义实体框架模板

您可以编辑.edmx 文件下的.Context.tt 模板并在其中添加您的代码。

VB.NET 中,那些.tt 文件是隐藏的。要更改它们,请在解决方案资源管理器工具栏中单击显示所有文件以查看您的 .edmx 文件下的 .tt 文件。然后打开.Context.tt 文件并在此块之后添加您的代码:

Partial <#=Accessibility.ForType(container)#> Class <#=code.Escape(container)#>
    Inherits DbContext

    Public Sub New()
        MyBase.New("name=<#=container.Name#>")

C#中,文件没有被隐藏,你可以打开.Context.tt文件并将代码放在这个块后面:

<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
    public <#=code.Escape(container)#>()
        : base("name=<#=container.Name#>")
    {

自定义 Visual Studio 使用的实体框架模板

您可以为实体框架自定义 Visual Studio 项模板。然后,您使用“添加新项目”窗口添加到项目中的每个 edmx,选择 ADO.NET 实体数据模型,都将使用修改后的模板。

例如,对于 C# 语言和区域设置 1033 和 EF6,您可以编辑存储在以下路径的 CSharpDbContext.Context.tt 文件:

\VisualStudioInstallationPath\Common7\IDE\ItemTemplates\CSharp\Data\1033\DbCtxCSEF6

【讨论】:

  • 您可能还会发现这篇文章很有帮助:Customize the DbContext Generator。在另一篇文章中,我展示了如何自定义 Visual Studio 使用的模板。您可以为实体框架自定义 Visual Studio 项模板。然后,您使用“添加新项目”窗口添加到项目中的每个 edmx,选择 ADO.NET 实体数据模型,都将使用修改后的模板。
猜你喜欢
  • 2011-11-25
  • 2016-05-13
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
相关资源
最近更新 更多