我有一个代码优先的POCO项目,我试图调整现有的数据库,以便与EF预期的一致,并给定我的现有模型。EF CTP4:如何判断EF列是不是身份
我有这些实体:
public class FlaggedDate
{
[Key]
public long scheduledDayID { get; set; }
[Required]
public DateTime date { get; set; }
[StringLength(50)]
[Required]
public string dateStatus { get; set; }
[Required]
public bool isVisit { get; set; }
[Required]
public bool hasAvailableSlots { get; set; }
[Required]
public bool hasInterviewsScheduled { get; set; }
// navigation properties
public ICollection<ScheduledSchool> scheduledSchool { get; set; }
public ICollection<Interview> interviews { get; set; }
public ICollection<PartialDayAvailableBlock> partialDayAvailableBlocks { get; set; }
public Visit visit { get; set; }
public ICollection<Event> events { get; set; }
}
和
public class Visit
{
[Key]
public long flaggedDateScheduledDayID { get; set; }
[Required]
public bool isFullDay { get; set; }
// navigation property
public FlaggedDate flaggedDate { get; set; }
}
这两者之间的关系是1:0 | 1 - 即FlaggedDate会存在,但它可能会或可能不会有相应的单个访问对象。
EF认为,基于此模型,FlaggedDate应该有一个额外的字段visit_flaggedDateScheduledDayID,它可以为空。我终于明白了原因:它认为访问字段flaggedDateScheduledDayID是一个标识列。它不应该是一个身份专栏;它应该是连接到FlaggedDate的外键。我认为它按照约定来做这件事情:我记得阅读一些东西,在CTP4中,任何单个键是int或long的字段都被认为是一个标识列。
有没有什么方法可以告诉EF这不是一个标识列?我试着弄弄Fluent API,但对我来说这是一个谜,并且没有可用于此的数据注释。
或者,或者,我有什么办法可以摆弄导航属性来让它出来吗?