实体框架,插入了引用上一个Id的外键,以及同一表上以前的外键的集合



我面临这个问题:我希望MallWorker引用上次注册的Sell,也引用以前发生的历史事件。它是一个";2 x外键";到同一个表,但我不知道如何配置它,所以它不会抱怨乘法。

public class MallWorker
{
public int Id{get;set;}
public string WorkerName{get;set;}
public int IdLastSell{get;set;}
public Sell IdLastSellNavigation{get;set;}
public ICollection<Sell> SellsHistoricalData{get;set;}
}
public class Sell
{
public int Id{get;set;}
public string Name{get;set;}
public int IdMallWorker{get;set;}
public DateTime Date{get;set;}
public MallWorker IdMallWorkerNavigation{get;set;}
}

如何配置实体框架6来处理这种情况?

这很好,只是您需要使IdSell为null,否则您将永远无法插入任何行,因为您具有所需的循环依赖关系,并且SQL Server在insert时检查所有外键。

例如:

public class MallWorker
{
public int Id { get; set; }
public string WorkerName { get; set; }
public int? IdLastSell { get; set; }
public Sell IdLastSellNavigation { get; set; }
public ICollection<Sell> SellsHistoricalData { get; set; }
}
public class Sell
{
public int Id { get; set; }
public string Name { get; set; }
public int IdMallWorker { get; set; }
public DateTime Date { get; set; }
public MallWorker IdMallWorkerNavigation { get; set; }
}

因此,您可以插入一个MallWorker,后面跟着多个Sell,然后更新MallWorder的IdSell。请注意,您的模型不能保证MallWorker的LastSellNavigation是他们自己的Sell实体之一。

因此,更好的模型可能是:

public class MallWorker
{
public int Id { get; set; }
public string WorkerName { get; set; }
public int? IdLastSale { get; set; }
[ForeignKey("Id,IdLastSale")]
public MallWorkerSale LastSale { get; set; }
public ICollection<MallWorkerSale> Sales { get; } = new HashSet<MallWorkerSale>();
}
public class MallWorkerSale
{
[Key, Column(Order = 0)]
public int IdMallWorker { get; set; }
[Key, Column(Order = 1)]
public int Id { get; set; }
public string Name { get; set; }
public DateTime Date { get; set; }
public MallWorker MallWorker{ get; set; }
}

最新更新