在唯一属性创建时主键异常

本文关键字:异常 创建 唯一 属性 | 更新日期: 2023-09-27 18:14:23

我正在用Asp.net core和EF core构建一个应用程序。我在执行代码第一概念时得到以下异常。

System.Reflection。CustomAttributeData'需要一个主键定义。

这只发生在我在DBContext类中用isUnique定义modelbuilder时。如果我注释掉整个modelbuilder,一切工作正常。它创建数据库和表没有任何问题。

下面是我的 Modelbuilder:

protected override void OnModelCreating(ModelBuilder modelbuilder)
    {
        // Make unique properties
        modelbuilder.Entity<Application>()
            .HasIndex(a => a.Name)
            .IsUnique();
        modelbuilder.Entity<Domain>()
            .HasIndex(a => a.Name)
            .IsUnique();
        modelbuilder.Entity<Roles>()
            .HasIndex(a => a.Name)
            .IsUnique();
        modelbuilder.Entity<Environments>()
            .HasIndex(a => a.Name)
            .IsUnique();
        modelbuilder.Entity<NetworkZone>()
            .HasIndex(a => a.Name)
            .IsUnique();
        modelbuilder.Entity<Status>()
            .HasIndex(a => a.Name)
            .IsUnique();
        modelbuilder.Entity<Type>()
            .HasIndex(a => a.Name)
            .IsUnique();
        modelbuilder.Entity<OperatingSystems>()
            .HasIndex(a => a.OSVersion)
            .IsUnique();
        modelbuilder.Entity<Servers>()
            .HasIndex(s => s.ServerName)
            .IsUnique();
        modelbuilder.Entity<ResourceGroup>()
            .HasIndex(a => a.Name)
            .IsUnique();
        modelbuilder.Entity<AccessType>()
            .HasIndex(a => a.Name)
            .IsUnique();
    }

这是我在所有模型中继承的entity base类。

public abstract class EntityBase
{
    /// <summary>
    /// Gets or sets the identifier.
    /// </summary>
    /// <value>
    /// The identifier.
    /// </value>
    [Key]
    public int Id { get; set; }
    /// <summary>
    /// Gets or sets the created by.
    /// </summary>
    /// <value>
    /// The created by.
    /// </value>
    public string CreatedBy { get; set; }
    /// <summary>
    /// Gets or sets the create on.
    /// </summary>
    /// <value>
    /// The create on.
    /// </value>
    public DateTime CreatedOn { get; set; }
    /// <summary>
    /// Gets or sets the modified by.
    /// </summary>
    /// <value>
    /// The modified by.
    /// </value>        
    public string ModifiedBy { get; set; }
    /// <summary>
    /// Gets or sets the modified on.
    /// </summary>
    /// <value>
    /// The modified on.
    /// </value>
    public DateTime ModifiedOn { get; set; }
}

在唯一属性创建时主键异常

我通过更改下面的模型生成器来纠正实体来修复它。

来自:

modelbuilder.Entity<Type>()
        .HasIndex(a => a.Name)
        .IsUnique();

:

modelbuilder.Entity<Types>()
        .HasIndex(a => a.Name)
        .IsUnique();

Type被系统使用,所以在我的modelbuilder中有一个错字