4

EDMX ファイルに単純な Test テーブルを作成しました。このテーブルは、TestId という 1 つの列を持つ Test という名前です。TestId はエンティティ キーで、Type は Guid です。StoreGeneratedPattern は Identity (デフォルト) に設定されます。

生成された SQL は次のようになります。

CREATE TABLE `Tests` (
    `TestId` CHAR(36) BINARY  NOT NULL
);

ALTER TABLE `Tests`
ADD CONSTRAINT `PK_Tests`
    PRIMARY KEY (`TestId` );

今私のコードの本体は次のようになります:

        using (var foo = new TestModelContainer())
        {
            var test = new Test() {
                TestId = Guid.NewGuid()
            };

            foo.Tests.AddObject(test);
            foo.SaveChanges();
        }

SaveChanges を実行すると、null 参照例外が発生します。スタック トレースは、MySql コネクタの内部に深く入り込みます (私はバージョン 6.3.5 を使用しています)。

System.NullReferenceException was unhandled
  Message=Object reference not set to an instance of an object.
  Source=MySql.Data.Entity
  StackTrace:
       at MySql.Data.Entity.SqlGenerator.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 EFMySQL.Program.Main(String[] args) in C:\Users\david.pio\Documents\Visual Studio 2010\Projects\EFMySQL\EFMySQL\Program.cs:line 40
       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: 

何か案は?

4

1 に答える 1

3

私自身の質問を解決しました

EDMX デザイナーには、StoreGeneratedPattern というプロパティがあります。EntityKey は Identity に設定されています。DBに依存しないアプリコードで主キーを生成しているので、これが不要であることはわかっています...ただし、DDLスクリプトが生成されると、テーブル作成スクリプトにはIDを強制するものが何もないので、私は考えましたそれは大丈夫でした。

値を Identity から None に変更すると、機能します....図に進みます

于 2010-12-10T02:40:50.957 に答える