2012-12-25 58 views
3

我的類層次結構類似以下內容:EF5代碼首先標識列錯誤

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")); 
    ........... 
    } 

我不使用自動錶代或遷移。相反,我有一些腳本來創建數據庫(實際上,我用第一次運行autogeneration和腳本創建表後,包括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 

NOTE0:我不喜歡EdmMetadata或類似的東西(它沒有啓動時創建的,所以我沒有腳本的話)的任何表。我不是EF的大師,我認爲Code First方法不需要任何元數據(對嗎?)。

注1:當然通過創建的上下文所需要的所有其他類/表=)

NOTE2:可能是我做過數據人口中一些錯誤的身份?所有字符串都會觸及IDENTITY。

問題:當我試圖挽救組我得到一個異常「的成員身份與‘ID’不將元數據集合中存在參數名:身份證」如何解決呢?

回答

5

我發現它!解決方案很簡單:從不混合屬性方式元數據聲明和流利api方式。 我只是刪除

[Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 

從id聲明,並改變了所有型號的聲明中OnModelChanging,如:

modelBuilder.Entity<MCQGroup>() 
    .HasKey(t0 => t0.Id) 
    .Map(m => m.ToTable("groups")) 
    .Property(x => x.Id) 
    .HasColumnName("id") 
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) 
    .IsRequired(); 
modelBuilder.Entity<MCQGroup>() 
    .HasMany(t1 => t1.Sections) 
    .WithMany(t2 => t2.Groups) 
    .Map(m => m.MapLeftKey("group_id").MapRightKey("section_id").ToTable("groups_to_sections")); 
+0

偉大的信息,謝謝! –