【问题标题】:EF6 Code First Pre-generated views for c#EF6 Code First 为 c# 预先生成的视图
【发布时间】:2014-04-22 12:02:29
【问题描述】:

我想提高 EF6 的性能。所以我为 c# 添加了模板 EF6 Code First Pre-generated views。运行我的模板时出现此错误

错误 18 运行转换: System.Reflection.TargetInvocationException:已引发异常 通过调用的目标。 ---> System.ArgumentNullException: 值不能为空。参数名称:existingConnection at System.Data.Entity.Utilities.Check.NotNull[T](T 值,字符串 参数名称)在 System.Data.Entity.DbContext..ctor(DbConnection 现有连接,布尔上下文OwnsConnection)在 AccountingCore.DomainEntities.DatabaseContext..ctor() 在 c:\Users\wassel\Desktop\Tay_Entreprise\迁移的 Taysir\Taysir Entreprise\AccountingCore\DomainEntities\DatabaseContext.cs:第 26 行
--- 内部异常堆栈跟踪结束 --- 在 System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) 在 System.RuntimeType.CreateInstanceSlow(布尔 publicOnly,布尔 skipCheckThis、布尔填充缓存、StackCrawlMark 和 stackMark)在 System.RuntimeType.CreateInstanceDefaultCtor(布尔 publicOnly, Boolean skipCheckThis、Boolean fillCache、StackCrawlMark& stackMark)
在 System.Activator.CreateInstance(类型类型,布尔非公共)在 System.Activator.CreateInstance(类型类型)在 Microsoft.VisualStudio.TextTemplating083B3A1F42B3A6F6984D21F93E2A562F18834A2D2CD4017C917BCF44C5B4413C639EC8000C24911B33CCC0A1B86BE1DE019321BC7BEBB9B61319B229A388E34A7A efAssembly,类型 contextType) 在 Microsoft.VisualStudio.TextTemplating083B3A1F42B3A6F6984D21F93E2A562F18834A2D2CD4017C917BCF44C5B4413C639EC8000C24911B33CCC0A1B86BE1DE019321BC7BEBB9B61319B229A3888888888B229A3888888888888B4A7Transformation()

这是我的上下文类

public class DatabaseContext : DbContext 
    {
        private static DatabaseContext instance;
        public static DatabaseContext Instance
        {
            get
            {
                return instance;
            }
        }
        private static DbConnection _dbConnection;
        public DatabaseContext() : base(_dbConnection,false)
        {
        }

        public static void InitialiseInstance(DbConnection connection)
        {
            if (instance != null)
            {
                instance.Dispose();
                GC.SuppressFinalize(instance);
            }
            instance = new DatabaseContext(connection);
        }

        public DatabaseContext(DbConnection connection)
            : base(connection,true)
        {
            Database.SetInitializer<DatabaseContext>(new DatabaseInitialiser());

        }

        public DbSet<class1> c1{ get; set; }

【问题讨论】:

    标签: c# entity-framework ef-code-first


    【解决方案1】:

    模板正在尝试实例化您的 DbContext 以生成视图。它使用默认的ctor来完成。但是,在您的情况下,默认 ctor 使用 _dbConnection 变量,该变量永远不会在应用程序域中初始化,转换正在运行,因此将具有一个空值,这会导致从基本 DbContext 抛出ArgumentNullException

    请注意,这里的问题实际上是您尝试使用的模式。我认为拥有一个 DbConnection 实例或 DbContext 实例不是一个好主意。您应该按需创建 DbContext/DbConnection 实例。请注意,DbContext 不是线程安全的。您还应该避免使用长期存在的 DbContext 实例,并倾向于使用工作单元模式,在这种模式下,您可以创建一个上下文来执行特定的操作,并在完成后丢弃该实例。您可以在此处阅读有关静态 DbConnection 的更多信息:SqlConnection Thread-Safe?,并且可能在更多地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-06
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多