我正在与外部系统进行集成,在该系统中他们使用大量复合键,并且经常使用strings
. 我现在面临一个问题,我需要制作一个复合外键nullable
。如果值是一个,int
我可以将它标记为可空,int?
但这在这里是不可能的。我想我必须使用 fluent api,但如果可能的话,数据注释是首选方式。更难的是,外键的第一部分也用作主键的第一部分,因此不能为空。
BillCurrency
和DisbCurrency
forFeeCalculation
是下面需要可以为空的键。创建的模型除了可空部分之外都是有效的。
明显的异常消息:
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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句