【问题标题】:EF5 Code First identity column errorEF5 Code First 标识列错误
【发布时间】:2012-12-11 11:37:33
【问题描述】:

我的类层次结构如下:

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' 的成员。参数名称:身份”如何解决? p>

【问题讨论】:

    标签: entity-framework identity dbcontext


    【解决方案1】:

    我找到了!解决方案很简单:切勿混合使用属性方式元数据声明和 fluent-api-way。 我刚刚删除了

      [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"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2013-04-20
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多