C# 实体框架HasForeignKey不工作
我在EF 6.2中遇到了HasForeignKey的一个奇怪行为 类别寄售有两个属性客户和发件人:C# 实体框架HasForeignKey不工作,c#,entity-framework,ef-fluent-api,C#,Entity Framework,Ef Fluent Api,我在EF 6.2中遇到了HasForeignKey的一个奇怪行为 类别寄售有两个属性客户和发件人: public class Consignment { public Consignment() { Sender = new Sender(); Customer = new Customer(); } public string OrderNo { get; set; } public Customer Customer
public class Consignment
{
public Consignment()
{
Sender = new Sender();
Customer = new Customer();
}
public string OrderNo { get; set; }
public Customer Customer { get; set; }
public Sender Sender { get; set; }
public int CustomerId { get; set; }
}
CustomerId是客户的外键。实体配置如下:
public class ConsignmentEntityConfiguration : EntityTypeConfiguration<Consignment>
{
public ConsignmentEntityConfiguration()
{
HasKey(s => s.OrderNo);
HasRequired(x => x.Customer)
.WithMany()
.HasForeignKey(x => x.CustomerId);
HasRequired(x => x.Sender)
.WithMany()
.Map(x => x.MapKey("SenderId"));
}
}
public class SenderEntityConfiguration : EntityTypeConfiguration<Sender>
{
public SenderEntityConfiguration()
{
HasKey(x => x.Number);
}
}
public class CustomerEntityConfiguration : EntityTypeConfiguration<Customer>
{
public CustomerEntityConfiguration()
{
HasKey(x => x.Id);
}
}
当我在新的测试项目(使用简单的类)中重新创建相同的模型时,HasForeignKey按预期工作
我在最初的项目中遗漏了什么?类非常简单,我检查了所有配置,原始项目和测试项目看起来一样,但工作方式不同
稍微简化的课程:
public class Sender
{
public string Number { get; set; }
public string Code { get; set; }
public string Name { get; set; }
}
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string MobilePhone { get; set; }
}
您可以尝试添加客户
public virtual ICollection<Consignment> Consignments { get; set; }
试过了,没用。还有一个问题更多的是关于“什么会以这种方式影响外键的简单行为”,而不是如何修复它。它在具有类似上下文的其他项目中工作得非常好。
public class Sender
{
public string Number { get; set; }
public string Code { get; set; }
public string Name { get; set; }
}
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string MobilePhone { get; set; }
}
public virtual ICollection<Consignment> Consignments { get; set; }
HasRequired(x => x.Customer)
.WithMany(x=>x.Consignments)
.HasForeignKey(x => x.CustomerId);