簡體   English   中英

無法添加實體類型“CustomDataType”的種子實體,因為沒有為所需的屬性“SoftwareVersionVersion”提供值

[英]The seed entity for entity type 'CustomDataType' cannot be added because no value was provided for the required property 'SoftwareVersionVersion'

我對 EF Core 相當陌生,但我正在嘗試使用 EF Core 6 為數據庫播種,並且在嘗試創建遷移時出現以下錯誤。

無法添加實體類型“CustomDataType”的種子實體,因為沒有為所需的屬性“SoftwareVersionVersion”提供值。

我有一個 BaseEntity class ,大多數其他實體類都繼承自它,如下所示:

public class BaseEntity
{
    [Key]
    public int Id { get; set; }
    public SoftwareVersion SoftwareVersion { get; set; }
}

我認為這個問題可能與我的 SoftwareVersion class 包含一個字符串類型的列作為主鍵有關:

public class SoftwareVersion
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string Version { get; set; }

    public SoftwareVersion() 
    {
        this.Version = "1.0.0";
    }
}

這是我的 CustomDataType class:

public class CustomDataType : BaseEntity
{
    public int Code { get; set; }
    public string Description { get; set; }
}

我一直在按照文檔在我的上下文的 OnModelCreating 方法中使用 modelBuilder 為我的數據庫播種:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Seed();
}

public static void Seed(this ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SoftwareVersion>().HasData(SoftwareVersionSeedData());
    modelBuilder.Entity<CustomDataType>().HasData(CustomDataTypeSeedData());
}

public SoftwareVersion[] SoftwareVersionSeedData()
{
    return new[]
    {
         new SoftwareVersion { Version = "1.0.0" }
    };
}

public static CustomDataType[] CustomDataTypeSeedData()
{
    return new[]
    {
        new CustomDataType { Id = 1, Code = 1000001, Description = "Binary" },
        new CustomDataType { Id = 2, Code = 1000002, Description = "Datetime" },
        new CustomDataType { Id = 3, Code = 1000003, Description = "Integer" },
        new CustomDataType { Id = 4, Code = 1000004, Description = "Other" },
        new CustomDataType { Id = 5, Code = 1000005, Description = "String" },
        new CustomDataType { Id = 6, Code = 1000006, Description = "Boolean" },
    };
}

在當前 state 中使用我的種子數據運行遷移顯然會導致錯誤,因為我沒有在 CustomDataTypeSeedData 方法中定義 SoftwareVersion 但即使我使用以下模式,我仍然會收到相同的錯誤:

new CustomDataType { Id = 1, Code = 1000001, Description = "Binary", SoftwareVersion = new SoftwareVersion() },

我只是不確定我到底哪里出錯了,或者確實,如果有更好的方法來解決這個問題。 在創建遷移時,我發現解決該錯誤的唯一方法是在我的 BaseEntity 中使我的 SoftwareVersion 可以為空,但這並不理想,因為 SoftwareVersion 是必填字段。

我可以通過將我的 SoftwareVersion 標記為虛擬並在我的 BaseEntity class 中為 SoftwareVersionId 添加一個單獨的屬性來防止上述錯誤:

public class BaseEntity
{
    [Key]
    public int Id { get; set; }
    public string SoftwareVersionId { get; set; }
    public virtual SoftwareVersion SoftwareVersion { get; set; }
}

所以我的種子數據方法現在看起來像這樣:

public static CustomDataType[] CustomDataTypeSeedData()
{
    return new[]
    {
        new CustomDataType { Id = 1, Code = 1000001, Description = "Binary", SoftwareVersionId = "1.0.0" }
        // etc 
        // etc
    };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM