新しいレコードを作成するときに上記のエラーが発生します。ID を挿入したくありません。データベースには ID が自動生成されており、これは素晴らしいことです。
正確な例外は次のとおりです。
[System.Data.UpdateException]
{"An error occurred while updating the entries. See the inner exception for details."}
{"Cannot insert explicit value for identity column in table 'PartRevisions' when IDENTITY_INSERT is set to OFF."}
マッピングは次のとおりです。
Public Class PartContext
Inherits DbContext
Public Property Parts As DbSet(Of Part)
Public Property PartRevisions As DbSet(Of PartRevision)
Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
MyBase.OnModelCreating(modelBuilder)
modelBuilder.Entity(Of PartRevision)().HasKey(Function(r) r.Id).Property(Function(r) r.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
End Sub
End Class
<Table("Parts")>
Public Class Part
<Key(), DatabaseGenerated(DatabaseGeneratedOption.Identity)>
Public Property Id As Integer
Public Property PartNumber As String
Public Property Owner As String
End Class
<Table("PartRevisions")>
Public Class PartRevision
Inherits Part
Public Property OriginalId As Integer
Public Property RevisionDate As DateTime
Public Property RevisionNumber As Integer
Public Property RevisionBy As String
End Class
継承を使用しない場合、正常に動作します。Id をオーバーライド可能にし、サブクラスの属性も指定すると、まだ機能しません。
私はOnModelCreatingそれを機能させようとしているという理由だけで物事をやっています。これがなくても大丈夫な気がします。もちろん、これでもうまくいきません...
次のクエリは、SQL Management Studio で実行すると正常に動作します。
insert into PartRevisions (originalid, revisiondate, revisionnumber, revisionby, partnumber, owner)
values (1, '1/1/2013', 1, 'eep', '123', 'ME')
ここに完全なプログラムの要点があります。テスト プロジェクトでこれを試していたのは、EF で継承を行う際にいくつかの問題が発生すると想定していたからです (まだ行ったことはありません)。
https://gist.github.com/eyston/4956444
ありがとう!