如何通过 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"。
我有以下 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"。