C# - > Entity Framework 6.1.3 - >复合可空外键字符串

问题描述 投票:0回答:1

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

BillCurrencyDisbCurrencyFeeCalculation是下面需要可以为空的关键。除了可空部分之外,创建的模型是有效的。

明显的异常消息:

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; }
}
c# entity-framework entity-framework-6
1个回答
0
投票

原来这是模型没有错,它是一个腐败的FeeCalculation值,并试图插入一个在ExchangeRate中不存在的密钥。

© www.soinside.com 2019 - 2024. All rights reserved.