我正在与外部系统集成,在那里他们使用大量的复合键,通常是strings
。我现在面临一个问题,我需要制作复合外键nullable
。如果值是int
我可以用int?
将其标记为可空,但这不可能在这里。我想我必须使用流畅的api,但如果有可能使用数据注释是首选方式。为了使其更加困难,外键的第一部分也被用作主键的第一部分,因此不能为空。
BillCurrency
和DisbCurrency
为FeeCalculation
是下面需要可以为空的关键。除了可空部分之外,创建的模型是有效的。
明显的异常消息:
INSERT语句与FOREIGN KEY约束“FK_dbo.FeeCalculations_dbo.ExchangeRates_BusinessSystemId_BillCurrency”冲突。冲突发生在数据库“Project.Database”,表“dbo.ExchangeRates”中。该语句已终止。
public class FeeCalculation
{
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string BusinessSystemId { get; set; }
[Key, Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CaseId { get; set; }
public string BillCurrency { get; set; }
[ForeignKey("BusinessSystemId,BillCurrency")]
public virtual ExchangeRate BillCurrencyObject { get; set; }
public string DisbCurrency { get; set; }
[ForeignKey("BusinessSystemId,DisbCurrency")]
public virtual ExchangeRate DisbCurrencyObject { get; set; }
}
public class ExchangeRate
{
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string BusinessSystemId { get; set; }
[Key, Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string ForeignCurrency { get; set; }
public string HomeCurrency { get; set; }
public DateTime EffectiveDate { get; set; }
public double Rate { get; set; }
}
原来这是模型没有错,它是一个腐败的FeeCalculation
值,并试图插入一个在ExchangeRate
中不存在的密钥。