[英]Entity Framework Constraints with Oracle DB
对此我不遗余力...我有一个针对Oracle的代码优先实体模型,而在解决此外键问题时遇到了问题:
“不能将属性'aidYearCode'配置为导航属性。该属性必须是有效的实体类型,并且该属性应具有非抽象的getter和setter。对于集合属性,该类型必须实现ICollection,其中T是有效的实体类型”。
以下是相关的代码段:
1)在“ OnModelCreating(DbModelBuilder modelBuilder)”中:
modelBuilder.Entity<INSTITUTIONAL>()
.HasMany(e => e.applicantBudgetComponents)
.WithRequired(e => e.institutional) // so this exists in APPLICANT_BUDGET_COMPONENTS: public virtual INSTITUTIONAL institutional { get; set; }
.HasForeignKey(e => e.aidYrCode)
.WillCascadeOnDelete(false);
2)具有外键的表APPLICANT_BUDGET_COMPONENTS具有:
[Key]
[Column(Order = 0)]
[StringLength(4)]
public string aidYrCode { get; set; }
3)最后,INSTITUTIONAL表具有主键:
[Key]
[StringLength(4)]
public string aidYearCode { get; set; }
这都是由VS2015中的Code-First向导生成的,这是我尝试过的:
放置注释
[ForeignKey(“ aidYrCode”)] in 2)
将来自Oracle模式的注释放入2)
[ForeignKey(“ FK1_RBRACMP_INV_ROBINST_CODE”)]
在外键名称中添加“ Id”,以便遵循EF6约定。
应当注意,APPLICANT_BUDGET_COMPONENTS具有复合主键。
事实证明,错误消息是虚假的。 “ aidYearcode”的配置是正确的,但是,在更深入地研究后,我发现其他表中缺少一些模型配置(与这里提到的那些间接相关),并为这些属性插入了适当的流畅命令和属性后,“错误”得以解决。 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.