1

大家好!

我正在使用带有 VS2010 的 EF 4.0 和 MySQL 作为数据库。我有一个抽象类(BaseEntity)和一个派生类(ChildEntity)。BaseEntity 有一个 Id 属性(即 PK),而 ChildEntity 还有一个属性(名称)。我正在使用 Table-Per-Type 策略。(顺便说一句,我可以设置实体映射吗?我知道,有一个选项卡,但是我不能在那里添加新表......)我的问题是,当我向上下文添加一个新的 ChildEntity 并且保存上下文(SaveChanges 方法)我得到一个 NullReferenceException。我使用的代码:

using (var oc = new ModelContext())
{
   ChildEntity child = ChildEntity.CreateChildEntity(1, "Name");
   oc.AddToBaseEntities(child);                
   oc.SaveChanges();
}

这是异常堆栈跟踪:

System.NullReferenceException was unhandled
  Message=Object reference not set to an instance of an object.
  Source=MySql.Data.Entity
  StackTrace:
       at MySql.Data.Entity.InsertGenerator.GenerateReturningSql(DbModificationCommandTree tree, DbExpression returning)
       at MySql.Data.Entity.InsertGenerator.GenerateSQL(DbCommandTree tree)
       at MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree)
       at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree)
       at System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree)
       at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
       at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues)
       at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
       at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
       at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
       at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
       at System.Data.Objects.ObjectContext.SaveChanges()
       at ConfigTool.Program.Main() in d:\dokumentumok\visual studio 2010\Projects\ConfigTool\ConfigTool\Program.cs:line 20
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException:

因此,错误来自提供者。我知道为什么会抛出它。当我将继承添加到模型时,它创建了一个约束,即 BaseEntity 和 ChildEntity 之间的 PK-FK 约束。我认为 MySql 提供者没有满足这个约束。那么我可以对此做些什么还是应该忘记使用继承?或者,也许我错过了什么?顺便说一句,我怎样才能做一个具体类型的表格策略?(去谷歌上查询?)

我使用提供程序和服务器的最新稳定版本。

谢谢您的帮助。

Ps.:抱歉,如果编辑(或我的英语)有问题,我是新来的。

4

0 回答 0