gpt4 book ai didi

asp.net-mvc-3 - 升级到EF 4.1后,出现System.NullReferenceException

转载 作者:行者123 更新时间:2023-12-01 14:33:49 27 4
gpt4 key购买 nike

我有一个使用EF CTP5的MVC3应用程序。升级到EF 4.1之后,我从这里抛出NullReferenceException:

   at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)

我从NuGet获得了EF 4.1。

使用自定义初始化程序初始化数据库
    public class RecreateDatabaseInitializer : IDatabaseInitializer<DatabaseContext>
{
public void InitializeDatabase(DatabaseContext context)
{
if (ConfigurationManager.ConnectionStrings["DatabaseContextSA"] == null)
{
EventLog.WriteEntry("RecreateDatabaseInitializer", "Connection string 'DatabaseContextSA' doesn't exist in config file.", EventLogEntryType.Warning);
return;
}

using (var ctx = new DatabaseContext("DatabaseContextSA"))
{
if (ctx.Database.Exists())
DropDatabase(ctx);

CreateDatabase(ctx);
InitializeDatabaseObjects(ctx);
ctx.SaveChanges();
}

PopulateDatabase(context);
context.SaveChanges();
}
}

PopulateDatabase()方法引发异常。

有任何想法吗?

更新:

看来问题出在第二个DatabaseContext实例化以手动重新创建数据库。它必须以某种方式干扰原始上下文。

最佳答案

我曾经使用过Ladislav's decorator for closing opened connections,但是我不得不对其进行一些修改。这是必需的(我相信),因为我使用sql身份验证,并且具有两个连接字符串(一个具有提升的权限,一个仅具有读/写权限)。

public class ForceDeleteInitializer : IDatabaseInitializer<DatabaseContext>
{
private readonly IDatabaseInitializer<DatabaseContext> InnerInitializer;

public ForceDeleteInitializer(IDatabaseInitializer<DatabaseContext> innerInitializer)
{
this.InnerInitializer = innerInitializer;
}

public void InitializeDatabase(DatabaseContext context)
{
using (var ctx = new DatabaseContext("DatabaseContextSA"))
{
Database.SetInitializer<DatabaseContext>(null);
ctx.Database.ExecuteSqlCommand("ALTER DATABASE " + ctx.Database.Connection.Database + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
}

this.InnerInitializer.InitializeDatabase(context);

Database.SetInitializer<DatabaseContext>(this);
}
}

关于asp.net-mvc-3 - 升级到EF 4.1后,出现System.NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5365376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com