EF Core创建意外的1:1关系

时间:2019-08-08 01:24:06

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

我有一个Accounts表,其中包含银行帐户。当用户选择一个帐户时,该帐户可能使用的预算是默认的。因此,在“帐户”表中,我有一个DefaultBudget列。

此外,在我的情况下,预算与帐户相关联。也就是说,在预测未来余额时,用户将预算分配给帐户。

有两个单独的链接。您需要先拥有一个帐户,然后才能为其创建预算(创建预算,分配帐户-必填)。但是您可以随后修改帐户,并分配默认预算-不需要)。

所以,我的代码第一个帐户:

internal class Account : EntityAudit
{
    [Key, Required, Column(Order = 0)]
    public int Id { get; set; }

    [Required, Column(Order = 1)]
    public Guid ExternalId { get; set; }

    [Required, Column(Order = 2)]
    public AccountTypes AccountTypeId { get; set; }

    public decimal? OpeningBalance { get; set; }

    [Column(TypeName = "date")]
    public DateTime? DateOpened { get; set; }

    [Required, Column(Order = 3)]
    public UserAccount UserAccount { get; set; }

    [Required, Column(Order = 4)]
    public string Name { get; set; }

    [Required]
    public bool IsFavourite { get; set; }

    public Subcategory DefaultSubCategory { get; set; }

    public Budget DefaultBudget { get; set; }

    [Required]
    public bool IsActive { get; set; }

}

此处的关键字段为public Budget DefaultBudget { get; set; }。因此,这不是必需的,我希望可以在“预算”表中创建一个FK。

我的预算代码第一个对象:

 internal class Budget : EntityAudit
    {
        [Required, Key, Column(Order = 0)]
        public int Id { get; set; }

        [Required, Column(Order = 1)]
        public Guid ExternalId { get; set; }

        [Required]
        public BudgetType BudgetType { get; set; }

        [Required, Column(Order = 2)]
        public string Name { get; set; }

        [Required, ForeignKey("PrimaryAccountId")]
        public Account PrimaryAccount { get; set; }

        [Required]
        public DateTime StartDate { get; set; }

        public DateTime? EndDate { get; set; }

        [Required, Column(Order = 3)]
        public UserAccount UserAccount { get; set; }

        [Required, Column(Order = 4)]
        public decimal AllowanceAmount { get; set; }

        public virtual List<TransactionLine> TransactionLines { get; set; }
    }

在这个对象中,我有public Account PrimaryAccount { get; set; }。注意,这是必需的,我试图指定FK名称。

但是,当我生成迁移时,最终得到的表结构是:

enter image description here

它在两个表之间创建了1:1关系。我不确定为什么会这样以及如何解决它。

预算可以链接到多个帐户,许多帐户可以链接到预算。听起来很多很多-但这还不太正确。它应该已经在帐户表中创建了DefaultBudgetId

0 个答案:

没有答案