Chr*_*xon 11 .net c# asp.net-mvc entity-framework connection-string
我确定我在某个阶段之前已经完成了这个,但我现在还不清楚怎么做!我的情景:
// This is generated from EDMX
public partial class HOLDbEntities : DbContext
{
public HOLDbEntities()
: base("name=HOLDbEntities")
{
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我希望这个连接字符串很容易更改(我想从HOLDbEntities实现),所以我需要覆盖这个构造函数.
我试过了:
public partial class HOLDbEntities
{
private const string _contextName = "HOLDbEntities";
public static string ContextName { get { return _contextName; } }
public HOLDbEntities()
: base(ContextName)
{
}
}
Run Code Online (Sandbox Code Playgroud)
但这会引发一个错误:
HOLDbEntities已经定义了一个名为"HOLDbEntities"的成员,它具有相同的参数类型.
我可以理解为什么会出现这种错误,但是为了做我想要实现的目标,我将如何阻止构造函数首先自动生成?
Dyl*_*yes 19
我对之前接受的答案进行了投票,因为这是一种相当优雅的方式.然而,另一种方法是修改生成dbContext类的T4模板.
首先使用EF DB时,你有一个.edmx文件,然后你有一个[Entity] .Context.tt文件.进入该文件并删除(或修改)以下代码:
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
this.Configuration.LazyLoadingEnabled = false;
<#
}
foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
{
// Note: the DbSet members are defined below such that the getter and
// setter always have the same accessibility as the DbSet definition
if (Accessibility.ForReadOnlyProperty(entitySet) != "public")
{
#>
<#=codeStringGenerator.DbSetInitializer(entitySet)#>
<#
}
}
#>
Run Code Online (Sandbox Code Playgroud)
现在你的上下文类将在没有构造函数的情况下生成,所以你应该能够在扩展类中创建一个.
我能建议的最好的是工厂方法:
private HOLDbEntities(string contextName) : base(contextName) { }
public static HOLDbEntities Create() {
return new HOLDbEntities(ContextName);
}
Run Code Online (Sandbox Code Playgroud)
并使用HOLDbEntities.Create()而不是new HOLDbEntities().
| 归档时间: |
|
| 查看次数: |
12832 次 |
| 最近记录: |