如何使用内部 DbContext? 我想知道如何隐藏 DbContext 对象,以便我的项目的其他库不能直接访问。
我将我的 DbContext 作为内部库放在库中,显然应该可以工作,但是当我运行该应用程序时,出现以下错误:
目标上下文“上下文”不可构造。添加默认构造函数或提供 IDbContextFactory 的实现
有人可以帮我吗?
我的数据层实现是:
[DbConfigurationType(typeof (ConfigContext))]
internal class Context : DbContext
{
internal Context()
: base(ConfigDataBase.GetSqlServerString(ConfigZnfce.Instance.SqlServerInstance))
{
}
//More code below
}
public class ConfigContext: DbConfiguration
{
public ConfigContext()
{
SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.LocalDbConnectionFactory("v11.0"));
SetProviderServices("System.Data.SqlClient", System.Data.Entity.SqlServer.SqlProviderServices.Instance);
SetDatabaseInitializer(new CreateDatabaseIfNotExists<Context>());
SetDatabaseInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>());
}
}
我希望所有其他库都需要通过一个工作单元和存储库才能对数据库进行任何操作
[已解决]
我将 Context 类保留为“内部”并将构造函数设置为“公共(public)”,如下面的代码所示:
[DbConfigurationType(typeof (ConfigContext))]
internal class Context : DbContext
{
public Context()
: base(ConfigDataBase.GetSqlServerString(ConfigZnfce.Instance.SqlServerInstance))
{
}
//More code below
}
最佳答案
DbContext 类的虚拟 DBSet<> 属性必须是公共(public)的(正如您在解决方案中发现的那样)。
如果您使用的是 TT 模板,则可以通过更改 DbSet(EntitySet entitySet) 函数来实现。请注意,术语 public 替换了字符串格式中的原始 {0} 参数。
public string DbSet(EntitySet entitySet) {
return string.Format(
CultureInfo.InvariantCulture,
"public virtual DbSet<{0}> {1} {{ get; set; }}",
_typeMapper.GetTypeName(entitySet.ElementType),
_code.Escape(entitySet));
}
现在,您可以拥有内部 DbContext、内部对象,并且仍然拥有公共(public)自动属性,以便 EF 可以进行数据绑定(bind)。
关于c# - 如何使用内部 DbContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28729154/