次のようなクラス階層があります。
class BaseType
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[DataType(DataType.Text)]
[StringLength(100)]
public string CreatedBy { get; set; }
[DataType(DataType.DateTime)]
public DateTime? CreatedDate { get; set; }
....
}
class Group : BaseType
{
public string Name { get; set; }
}
コンテキストのOnModelCreatingメソッドは次のとおりです。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MCQGroup>()
.HasKey(t0 => t0.Id)
.Map(m => m.ToTable("groups"))
.HasMany(t1 => t1.Sections)
.WithMany(t2 => t2.Groups)
.Map(m =>
m.MapLeftKey("group_id")
.MapRightKey("section_id")
.ToTable("groups_to_sections"));
...........
}
テーブルの自動生成または移行を使用していません。代わりに、データベースを作成するためのスクリプトがいくつかあります(実際、最初の実行には自動生成を使用し、その後、スクリプトで作成されたテーブルにはwebdata_ *テーブルが含まれています)。これは、使用される複数のコンテキストが原因で発生します。この場合、テーブルの自動生成に多くの問題があります。
SQLスクリプトは次のとおりです。
-- Tables creation
CREATE TABLE [groups]
(
[id] INT NOT NULL IDENTITY(1, 1),
[name] NVARCHAR(300) NOT NULL,
[createdby] NVARCHAR(4000) NULL,
[createddate] DATETIME NULL,
[modifiedby] NVARCHAR(4000) NULL,
[modifieddate] DATETIME NULL
);
GO
......
-- Intitial data population
SET IDENTITY_INSERT [user_profiles] ON;
GO
INSERT INTO [user_profiles] ...........
SET IDENTITY_INSERT [user_profiles] OFF;
GO
INSERT INTO [webpages_Membership] .............
GO
SET IDENTITY_INSERT [webpages_Roles] ON;
GO
INSERT INTO [webpages_Roles] ..............
GO
SET IDENTITY_INSERT [webpages_Roles] OFF;
GO
INSERT INTO [webpages_UsersInRoles] ...........
GO
注0:EdmMetadataなどのテーブルはありません(起動時に作成されていないため、スクリプトを作成していません)。私はEFの第一人者ではなく、Code Firstのアプローチにはメタデータは必要ないと思います(私は正しいですか?)。
注1:もちろん、作成されたコンテキストに必要な他のすべてのクラス/テーブル=)
注2:データの入力中にIDENTITYで何か問題が発生した可能性がありますか?IDENTITYに触れるすべての文字列はここにあります。
問題:グループを保存しようとすると、「ID'id'のメンバーがメタデータコレクションに存在しません。パラメーター名:identity」という例外が発生します。修正方法を教えてください。