C# - >实体框架6.1.3 - >复合可空外键字符串

时间:2018-03-28 11:49:46

标签: c# entity-framework entity-framework-6

我正在与外部系统集成,在外部系统中,他们使用大量复合键,而且常常是strings。我现在面临一个问题,我需要制作一个复合外键nullable。如果值为int,我可以将其标记为int?为空,但这不可能。我想我必须使用流畅的api,但如果有可能使用数据注释是首选方式。为了使它更难,外键的第一部分也被用作主键的第一部分,因此不能为空。

{p> BillCurrencyDisbCurrency 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; }
}

1 个答案:

答案 0 :(得分:0)

原来这对模型没有任何问题,它是FeeCalculation值已损坏并试图插入ExchangeRate中不存在的密钥。