如何通过 Entity Framework 代码优先方法定义导航 属性

How to define a navigation property via Entity Framework code first approach

我有以下 class 想用作 Entity Framework 中的数据上下文:

    public class AggregateRecord : IAggregateRecord
    {
        [Key]
        public int AggregateRecordID { get; set; }
        public DateTime? InsertDate { get; set; } = DateTime.Now;

        public DateTime BookingDate { get; set; }
        public string AmountTypeName { get; set; }
        public int? UnifiedInstrumentCode { get; set; }
        public double? Amount { get; set; }

        public string BookingAccountID { get; set; }
        public string AccountCurrency { get; set; }
        public string ClientCurrency { get; set; }
        public string AffectsBalance { get; set; }
        public string AssetType { get; set; }
        public string UnderlyingInstrumentSubType { get; set; }
        public string InstrumentSymbol { get; set; }
        public string InstrumentSubType { get; set; }
        public string UnderlyingInstrumentAssetType { get; set; }
        public string UnderlyingInstrumentDescription { get; set; }
        public string UnderlyingInstrumentSymbol { get; set; }
        public string UnderlyingInstrumentUic { get; set; }
        public double? AmountAccountCurrency { get; set; }
        public string AmountClientCurrency { get; set; }

        public string InstrumentDescription { get; set; }
        public virtual ICollection<InstrumentInfo> InstrumentInfo { get; set; }
    }

    public class InstrumentInfo
    {
        [Key]
        public int InstumentInfoID {get;set;}

        public string SomeInformation { get; set; }

        public int AggregateRecordID { get; set; }

        public virtual AggregateRecord AggregateRecord { get; set; }
    }

我研究了为 EF6 提供的示例,但我仍然遇到问题,当我尝试更新迁移时出现以下错误:

在模型生成过程中检测到一个或多个验证错误:

引用的 table 'dbo.AggregateRecords' 中没有与外键 'FK_dbo.InstrumentInfoes_dbo.AggregateRecords_AggregateRecordID' 中的引用列列表匹配的主键或候选键。 无法创建约束或索引。查看以前的错误。

如何定义 classes 以便可以通过导航访问 InstrumentInfo 属性?

public class InstrumentInfo
{
    [Key]
    public int InstumentInfoID {get;set;}

    public string SomeInformation { get; set; }

    public int AggregateRecordId { get; set; }

    public virtual AggregateRecord AggregateRecord { get; set; }
}

你好像忘了"public"

我"solved"这个问题。这很奇怪,但也许它对将来的人有帮助,这就是为什么我回答我自己的问题。

我将 class AggregateRecord 重命名为 AggregateEntry。使用新重命名的 class 名称执行添加迁移和更新数据库。它奏效了。 看起来迁移定义或其他任何问题都存在问题,但它解决了。 最后,我把它重命名回原来的名字,再做同样的程序,瞧,它成功了。

@Dennis Spade:感谢您的努力,如果没有您的提示,我会花费更多时间才能找到真正的 "problem"。