簡體   English   中英

為什么 Entity Framework Core 會生成 HashSet?

[英]Why does Entity Framework Core generate HashSet?

如果我的實體與另一個實體沒有關系,為什么 Entity Framework Core 會生成一個HashSet

我收到以下錯誤

檢測到不支持的可能 object 循環。 這可能是由於循環或 object 深度大於最大允許深度 32

對於我的 model 循環,我在導航屬性中得到 null 。

我由 EF Core 創建的實體:

public partial class Customers
{
    public Customers()
    {
        Orders = new HashSet<Orders>();
    }

    public int CustomerId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }

    public virtual ICollection<Orders> Orders { get; set; }
}

Orders實體:

public partial class Orders
{
    public Orders()
    {
        OrderItems = new HashSet<OrderItems>();
    }

    public int OrderId { get; set; }
    public int? CustomerId { get; set; }
    public byte OrderStatus { get; set; }
    public DateTime OrderDate { get; set; }
    public DateTime RequiredDate { get; set; }
    public DateTime? ShippedDate { get; set; }
    public int StoreId { get; set; }
    public int StaffId { get; set; }

    public virtual Customers Customer { get; set; }
    public virtual Staffs Staff { get; set; }
    public virtual Stores Store { get; set; }
    public virtual ICollection<OrderItems> OrderItems { get; set; }
}

我的數據庫架構:

CREATE TABLE [sales].[customers]
(
    [customer_id] [int] IDENTITY(1,1) NOT NULL,
    [first_name] [varchar](255) NOT NULL,
    [last_name] [varchar](255) NOT NULL,
    [phone] [varchar](25) NULL,
    [email] [varchar](255) NOT NULL,
    [street] [varchar](255) NULL,
    [city] [varchar](50) NULL,
    [state] [varchar](25) NULL,
    [zip_code] [varchar](5) NULL,

    PRIMARY KEY CLUSTERED ([customer_id] ASC)
                WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                      IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                      ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [sales].[orders]
(
    [order_id] [int] IDENTITY(1,1) NOT NULL,
    [customer_id] [int] NULL,
    [order_status] [tinyint] NOT NULL,
    [order_date] [date] NOT NULL,
    [required_date] [date] NOT NULL,
    [shipped_date] [date] NULL,
    [store_id] [int] NOT NULL,
    [staff_id] [int] NOT NULL,

    PRIMARY KEY CLUSTERED ([order_id] ASC)
                WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                      IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                      ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [sales].[orders] WITH CHECK 
    ADD FOREIGN KEY([customer_id])
        REFERENCES [sales].[customers] ([customer_id])
        ON UPDATE CASCADE
        ON DELETE CASCADE
GO

ALTER TABLE [sales].[orders] WITH CHECK 
    ADD FOREIGN KEY([staff_id])
        REFERENCES [sales].[staffs] ([staff_id])
GO

ALTER TABLE [sales].[orders] WITH CHECK 
    ADD FOREIGN KEY([store_id])
        REFERENCES [sales].[stores] ([store_id])
        ON UPDATE CASCADE
        ON DELETE CASCADE
GO
  • 構造函數中的 HashSet 不是強制性的,它旨在幫助您在沒有從數據庫中獲取記錄時避免NullReferenceExceptions
  • 您可以使用其他 Collection 類型,但我相信 HashSet 在大多數情況下是合適的。

該錯誤是由於循環引用的問題,這是我使用 Asp Net Core 5 的項目的解決方案,忽略循環引用。

學分: https://github.com/dotnet/aspnetcore/issues/28286

暫無
暫無

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

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