簡體   English   中英

map如何建立單向的多對一關系?

[英]How to map a unidirectional many-to-one relationship?

我有一個項目實體:

public class Item
{
    public long Id { get; set; }
    public string Name { get; set; }
    public string Skuid { get; set; }
    public double Price { get; set; }
    public double Amount { get; set; }
}

和一個訂單實體:

public class Order
{
    public long Id { get; set; }
    public DateTime Date { get; set; }
    public StatusEnum Status { get; set; }
    public long SellerId { get; set; }
    public Seller Seller { get; set; }
    public double Total { get; set; }
    public IList<Item> Items { get; set; }
}

我的目標是將包含項目的訂單保存在數據庫中,但是當發出請求時,只保存我的實體“賣方”的引用,而不是項目的引用。

我在“訂單”實體上做了以下映射:

public class OrderMap : IEntityTypeConfiguration<Order>
{
    public void Configure(EntityTypeBuilder<Order> builder)
    {
        builder.ToTable("Orders");

        builder.HasKey(x => x.Id);

        builder.Property(x => x.Id)
            .ValueGeneratedOnAdd()
            .UseIdentityColumn();

        builder.Property(x => x.Date)
            .IsRequired()
            .HasColumnName("DateSale")
            .HasColumnType("DATETIME")
            .HasDefaultValueSql("GETDATE()");
        
        builder.Property(x => x.Total)
            .IsRequired()
            .HasColumnName("Total")
            .HasColumnType("DECIMAL");

        builder.Property(x => x.Status)
            .IsRequired()
            .HasConversion(
                v => v.ToString(),
                v => (StatusEnum)Enum.Parse(typeof(StatusEnum), v))
            .HasColumnName("Status")
            .HasColumnType("NVARCHAR") //verificar se nao vai dar conflito
            .HasMaxLength(120); 

        builder
            .HasOne(x => x.Seller)
            .WithOne()
            .HasConstraintName("FK_Seller_Order")
            .OnDelete(DeleteBehavior.Cascade);

        builder
            .HasMany(x => x.Items)
            .WithOne()
            .HasConstraintName("FK_Item_Order")
            .IsRequired()
            .OnDelete(DeleteBehavior.Cascade); //
    }
}

正確的映射是什么?

請首先將這些屬性 OrderId 和 Order 添加到您的 Item 實體 class。這樣您就可以指示框架在數據庫中創建一個 OrderId 外鍵列。

public class Item
{
   public long Id { get; set; }
   public string Name { get; set; }
   public string Skuid { get; set; }
   public double Price { get; set; }
   public double Amount { get; set; }
   public long OrderId { get; set; }
   public Order Order {get; set; }
}

也許這部分

builder.HasMany(x => x.Items).WithOne()

應該是這樣的

 builder.HasMany(x => x.Items).WithOne(x => x.Order)

暫無
暫無

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

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