虽然键是使用HasKey定义的,但"EntityType没有键定义"异常

Mal*_*kin 7 c# entity-framework model ef-code-first entity-framework-5

使用EF 5(逆向工程代码优先),我的模型工作正常,直到它突然停止.

\ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType'Projects.Date'没有定义键.定义此EntityType的键.

\ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType'ProjectstRisk'没有定义键.定义此EntityType的键.

我使用流畅的API而不是属性来定义键,这是我的ProjectsDates类.

public partial class ProjectsDate
{
    public string OSProjectCode { get; set; }
    public Nullable<System.DateTime> TargetStart { get; set; }
    public Nullable<System.DateTime> EndDateOriginal { get; set; }
    public Nullable<System.DateTime> EndDateChangeControl { get; set; }
    public Nullable<System.DateTime> EndDateActual { get; set; }
    public Nullable<System.DateTime> GoLiveAgreed { get; set; }
    public Nullable<System.DateTime> GoLiveActual { get; set; }
    public virtual Project Project { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
public class ProjectsDateMap : EntityTypeConfiguration<ProjectsDate>
{
    public ProjectsDateMap()
    {
        // Primary Key
        this.HasKey(t => t.OSProjectCode);

        // Properties
        this.Property(t => t.OSProjectCode)
            .IsRequired()
            .HasMaxLength(10);

        // Table & Column Mappings
        this.ToTable("ProjectsDates");
        this.Property(t => t.OSProjectCode).HasColumnName("OSProjectCode");
        this.Property(t => t.TargetStart).HasColumnName("TargetStart");
        this.Property(t => t.EndDateOriginal).HasColumnName("EndDateOriginal");
        this.Property(t => t.EndDateChangeControl).HasColumnName("EndDateChangeControl");
        this.Property(t => t.EndDateActual).HasColumnName("EndDateActual");
        this.Property(t => t.GoLiveAgreed).HasColumnName("GoLiveAgreed");
        this.Property(t => t.GoLiveActual).HasColumnName("GoLiveActual");

        // Relationships
        this.HasRequired(t => t.Project)
            .WithOptional(t => t.ProjectsDate);

    }
}
Run Code Online (Sandbox Code Playgroud)

为什么EF没有看到我流畅的API映射?

Tom*_*mer 2

由于某种原因(可能是一个错误),FluentAPI 需要以约定方式定义密钥 - 即 ClassName + Id,或者在您的情况下:

ProjectsDateId
Run Code Online (Sandbox Code Playgroud)

这样,EF 创建的元数据就可以确认其相关的事实。非常烦人但是...