C# 实体框架-CommitFailureHandler.ClearTransactionHistory()
我遇到了一个关于C# 实体框架-CommitFailureHandler.ClearTransactionHistory(),c#,sql-server,entity-framework,wcf,entity-framework-6,C#,Sql Server,Entity Framework,Wcf,Entity Framework 6,我遇到了一个关于commitFailureHandler.ClearTransactionHistory()的问题方法。当我第一次运行它时,我得到一个异常,它声明'dbo.EFTransactionHistory'无效 InnerException: System.Data.SqlClient.SqlException HResult=-2146232060 Message=Invalid object name 'dbo.EFTransactionHistory'. Source=.Ne
commitFailureHandler.ClearTransactionHistory()的问题实体框架6.1中的代码>方法。当我第一次运行它时,我得到一个异常,它声明'dbo.EFTransactionHistory'
无效
InnerException: System.Data.SqlClient.SqlException
HResult=-2146232060
Message=Invalid object name 'dbo.EFTransactionHistory'.
Source=.Net SqlClient Data Provider
ErrorCode=-2146232060
Class=16
LineNumber=1
Number=208
Procedure=""
Server=********
State=1
我签入了数据库&当然,该表不存在。当然,我们应该在每次应用程序启动时都执行这个方法。在本例中,它是一个WCF服务&我制作了一个定制的服务初始化器,因此每当启动mex或第一个服务调用时,它都会初始化服务所需的一些资源
以下是我在web.config中为我的服务提供的内容:
<entityFramework codeConfigurationType="WSI.Common.DataAccess.Configuration.EntityFramework.TransactionDbConfiguration, WSI.Common.DataAccess">
接下来是我扩展TransactionContext类的代码:
public class DbTransactionContext : TransactionContext
{
public DbTransactionContext(DbConnection dbConnection) : base(dbConnection)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TransactionRow>().ToTable("EFTransactionHistory");
}
}
当然,如果我删除commitFailureHandler.ClearTransactionHistory()
&我运行应用程序,在服务运行的正常过程中更新数据库中的任何实体后,它将创建dbo.EFTransactionHistory
表。然后停止服务,包括commitFailureHandler.ClearTransactionHistory()代码>方法它将工作
在尝试从表中删除行之前,ClearTransactionHistory()
应该如何检查表是否存在,或者它触发OnModelCreating()
方法
我已经为此工作了几天&我很想找到解决这个问题的方法
谢谢尝试在初始化方法中添加以下内容:
dbContext.Database.Initialize(true);
这将触发/强制数据库初始化。我添加了“dbContext.Database.Initialize(true);”在我检查静态Initialize()方法中的dbContext是否为null之后。我还是有同样的问题。现在我应该注意到,我没有采用代码优先的方法……我采用了模型优先的方法来创建数据库,然后从中创建实体。我不知道这是否有区别。我想不会。
protected static void Initialize(DbContext dbContext)
{
if (dbContext != null)
{
using (CommitFailureHandler commitFailureHandler = CommitFailureHandler.FromContext(dbContext))
{
if (commitFailureHandler != null)
{
commitFailureHandler.ClearTransactionHistory();
//commitFailureHandler.PruneTransactionHistory();
}
}
}
}
dbContext.Database.Initialize(true);