我正在与外部系统集成,在外部系统中,他们使用大量复合键,而且常常是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; }
}
答案 0 :(得分:0)
原来这对模型没有任何问题,它是FeeCalculation
值已损坏并试图插入ExchangeRate
中不存在的密钥。