我有一个.net / database项目,其中的记录由版本ID和数字键(取自SEQUENCE)唯一标识。 我首先使用带有POCO和关系的EF代码(实际上,仅使用代码,因为数据库不能用代码修改)。所有关系都是通过modelBuilder动作指定的。
我有一个POCO,其中(其中包括)行
public long HistoryVersion { get; set; } // version
public long Id { get; set; } // my unique id per version
public long OrgUnitId { get; set; } // if of other entity
public virtual OrgUnit OrgUnit { get; set; } // reference to other entity
通过HistoryVersion和OrgUnitId对OrgUnit表的引用是目标表中主键的列。 为了指定关系,我使用
modelBuilder.Entity<Assessment>()
.HasRequired(me => me.OrgUnit)
.WithMany()
.HasForeignKey(me => new {me.HistoryVersion, me.OrgUnitId});
如果我尝试获取包括orgUnit在内的评估,则会收到SQL错误:
Invalid column name 'OrgUnit_HistoryVersion'.
Invalid column name 'OrgUnit_Id'.
为什么EF会创建这些怪异的列名,以及如何避免这种情况(应该使用现有的HistoryVersion和OrgUnitId列)?