【发布时间】:2017-01-06 12:23:29
【问题描述】:
我有两个模型:
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 属性的 Key.. 但这使得主键从 Id 变为 Number,这不是我想要的......
【问题讨论】:
-
EF6 还是 EF Core?
-
我正在使用 EF Core
-
并且
Batch.CustomerId属性应该与Customer.Number相关? -
你的外键应该总是引用主键。这就是主键的目的,为特定行提供唯一标识符。如果您希望
Number成为唯一标识符,它应该是您的主键。 -
不,一直都是这样。我的评论是故意笼统的。我很确定使用不同的属性也支持较低版本的 EF,但这并不意味着这是一个好主意或你应该这样做。除了主键之外,没有什么好的理由为任何东西创建外键,如果您认为有更好的列可以使用,那么这就是该列作为您的主键的论据。
标签: mysql asp.net-mvc entity-framework .net-core entity-framework-core