[英]EF6 Code First Pre-generated views for c#
我想提高EF6的演奏技巧。 因此,我为c#添加了模板EF6 Code First预生成视图。 运行模板时出现此错误
错误18运行转换:System.Reflection.TargetInvocationException:调用的目标引发了异常。 ---> System.ArgumentNullException:值不能为null。 参数名称:System.Data.Entity.Utilities.Check.NotNull [T](T值,System.Data.Entity.DbContext..ctor(Tb,String parameterName),AccountingCore.DomainEntities.DatabaseContext,DbConnection existingConnection,Boolean contextOwnsConnection) ..ctor()在c:\\ Users \\ wassel \\ Desktop \\ Tay_Entreprise \\ Migrated Taysir \\ Taysir Entreprise \\ AccountingCore \\ DomainEntities \\ DatabaseContext.cs:第26行
-内部异常堆栈跟踪的结尾--在System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,布尔skipCheckThis, System.RuntimeType.CreateInstanceDefaultCtor处的布尔值fillCache,StackCrawlMark和stackMark(布尔值publicOnly,布尔值skipCheckThis,布尔值fillCache,StackCrawlMark和stackMark)
在System.Activator.CreateInstance(类型类型,布尔非公开)在System.Activator.CreateInstance(类型类型)在Microsoft.VisualStudio.TextTemplating083B3A1F42B3A6F6984D21F93E2A562F18834A2D2CD4017C917BCF44C5B4413C639EC8000C24911B33CCC0A1B86BE1DE019321BC7BEBB9B61319B229A38834A7.GeneratedTextTransformation.GetEdmx(大会efAssembly,类型contextType)在Microsoft.VisualStudio.TextTemplating083B3A1F42B3A6F6984D21F93E2A562F18834A2D2CD4017C917BCF44C5B4413C639EC8000C24911B33CCC0A1B86BE1DE019321BC7BEBB9B61319B229A38834A7.GeneratedTextTransformation.TransformText ()
这是我的上下文类
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; }
该模板正在尝试实例化您的DbContext来生成视图。 它使用默认的ctor来完成。 但是,在您的情况下,默认ctor使用的是_dbConnection
变量,该变量永远不会在应用程序域中初始化,正在运行转换,因此将具有null值,这会导致从基本DbContext抛出ArgumentNullException
。
请注意,这里的问题实际上是您尝试使用的模式。 我认为拥有一个DbConnection实例或DbContext实例不是一个好主意。 您应该按需创建DbContext / DbConnection实例。 请注意,DbContext不是线程安全的。 您还应该避免DbContext实例寿命长,并倾向于使用Unit of Work模式,在该模式下,您创建上下文来执行特定操作,并在完成后丢弃该实例。 您可以在此处阅读有关静态DbConnection的更多信息: SqlConnection线程安全吗? 可能还有更多地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.