c# - 如何使用内部 DbContext?

标签 c# entity-framework-6

如何使用内部 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/

相关文章:

c# - EntityFramework.Extended 更新不起作用 - 无法转换 DynamicProxy

asp.net-mvc - 创建新 Controller - 运行所选代码生成器时出错

c# - 解析 Visual Studio 解决方案文件

c# - "The ObjectContext instance has been disposed"用于非 EF 实体

c# - 在 Visual Studio 外部为 ASP.NET 网站重新安装 NuGet 包

javascript - C# 中的文件夹对话框

c# - 为 EntityFramework6.Npgsql 指定数据库连接字符串 - Code First

c# - 自定义数据库表的自定义实体生成器

c# - RibbonControlsLibrary - 如何禁用最小化?

c# - 是否可以在 winrt 中完全处理用户控件?