簡體   English   中英

無法確定導航屬性表示的與枚舉類型實體的關系

[英]Unable to determine the relationship represented by navigation property to an Enum type entity

我有這個.Net Core 3.1 web 項目,它有一個實體( Process )對 Enum 類型實體( Status )的引用。 無狀態工作流使用這種方式設置來處理程序中進程狀態的變化。 在運行時,它在這一行失敗並出現上述異常消息:

processes = await _dbContext.Process.ToListAsync();

完整的異常消息:

'Unable to determine the relationship represented by navigation property 'Process.Status' of type 'Status'. 
Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.'

下面是 model 和 dbcontext 代碼:

public enum StatusID : int
{
    [Display(Name = "Draft")]
    Draft = 1,

    [Display(Name ="In Review")]
    InReview = 2,

    [Display(Name = "Approved")]
    Inactive = 3
}

[Table("Status", Schema = "Industrial")]
public class Status
{
    private Status() { }

    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public StatusID StatusID { get; private set; }

    [StringLength(50)]
    public string Name { get; private set; }
}

[Table("Process", Schema = "Industrial")]
public partial class Process
{
    [Key]
    public int ProcessID { get; set; }
    public StatusID StatusID { get; set; } = StatusID.Draft;
    [ForeignKey("StatusID")]
    public virtual Status Status { get; private set; }
}

public class DbContext
{
    public DbSet<Process> Process { get; set; }
    public DbSet<Status> Status { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    
        modelBuilder.Entity<Status>().HasNoKey().Property(c => c.StatusID)
         .HasConversion(
             v => v.ToString().ToLowerInvariant(),
             v => (StatusID)Enum.Parse(typeof(StatusID), v, true)
         )
         .HasColumnName("GeneralName")
         .IsUnicode(false);
    }
}

我在這里搜索了其他帖子,許多人建議在 DbContext 的 OnModelCreating 方法中放置導航定義,我嘗試了一些變體,都失敗了。 這是我嘗試過的一對:

modelBuilder.Entity<Process>()
                .HasOne("Status", "Status")
                .WithOne("Status");


modelBuilder.Entity<Process>()
                    .HasOne(p => p.Status)
                    .WithOne()
                    .HasForeignKey<Status>(m => m.StatusID)
                    .OnDelete(DeleteBehavior.Restrict);

我找到了這個問題的根本原因,是因為我的數據庫表生成腳本在外鍵創建語句中有錯誤,應該如下:

ALTER TABLE [Industrial].[Process]  WITH CHECK ADD  CONSTRAINT [FK_Process_Status_StatusID] FOREIGN KEY([StatusID])
REFERENCES [Industrial].[Status] ([StatusID])

我所擁有的是[FK_Process_Status] ,而不是[FK_Process_Status_StatusID]

這是在 Microsoft SQL 服務器中。

暫無
暫無

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

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