gpt4 book ai didi

mysql - AspNet EF 引用字段的外键

转载 作者:行者123 更新时间:2023-11-29 01:36:32 27 4
gpt4 key购买 nike

我有两个模型:

public class Customer
{
public int Id { get; set; }
public int Number { get; set; }
public int ParentNumber { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Country { get; set; }
public string Language { get; set; }
}

public class Batch
{
public int Id { get; set; }
public int Number { get; set; }
public string FileName { get; set; }
public string ArticleNumber { get; set; }
public string ArticleDescription { get; set; }
public int Weight { get; set; }
public DateTime ProductionDate { get; set; }
public DateTime DeliveryDate { get; set; }
public DateTime BestBeforeDate { get; set; }
public DateTime? ApprovedDateTime { get; set; }
public int CustomerId { get; set; }
public virtual Customer Customer { get; set; }
}

一个批处理可以附加一个客户。但由于我们是从另一个系统导入数据,我们决定不接管他们的 id's。现在外键说尝试通过属性 Customer.Id

找到客户

我正在尝试从 Batch.Customer(Id)

获取指向 Customer.Number 的外键

我怎样才能成功?我已经尝试将 Customer.Number 定义为具有 Key 属性的键。但这使得主键从 Id 变为 Number,这不是我想要的......

最佳答案

在 EF Core 之前,您的要求在 EF 中是不可能的。幸运的是,在 EF Core 中可以使用 Alternate Keys 来完成。特征。但请注意,为了能够使用它,您的 Cusomer.Number 字段应该是唯一的。

该解决方案需要 Fluent API 配置。

首先将 Customer.Number 定义为备用键:

modelBuilder.Entity<Customer>()
.HasAlternateKey(e => e.Number);

然后建立关系如下:

modelBuilder.Entity<Batch>()
.HasOne(e => e.Customer)
.WithMany()
.HasForeignKey(e => e.CustomerId)
.HasPrincipalKey(e => e.Number);

最后两行将满足您的要求。

作为旁注,最好将属性(和列)命名为 CustomerNumber 以避免混淆其中的值。

关于mysql - AspNet EF 引用字段的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41505667/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com