无法在 EF Code First 中创建复合主键

Can't make a composed primary key on EF Code First

我正在尝试在 EF 上进行新项目的首次迁移,但我一直收到一个没有意义的异常。

我为我的每个业务 classes 使用单独的配置 classes 并且收到异常的是这个:

public class AlunoAcessaArquivoMapeamento : EntityTypeConfiguration<AlunoAcessaArquivo> {
    public AlunoAcessaArquivoMapeamento() {
        ToTable(Regex.Replace(typeof(AlunoAcessaArquivo).Name, "([^A-Z])([A-Z])", "_").ToLower());
        HasKey(e => new {e.AlunoId, e.ArquivoId});
        HasRequired(a => a.Aluno).WithMany(a => a.AlunosAcessaArquivos).HasForeignKey(a => a.AlunoId);
        HasRequired(a => a.Arquivo).WithMany(a => a.AlunosAcessaArquivos).HasForeignKey(a => a.ArquivoId);
    }
}

它配置的class就是这个,就是一个简单的多对多关系table:

public class AlunoAcessaArquivo : EntidadeBase {

    public virtual Aluno Aluno { get; set; }

    public virtual Arquivo Arquivo { get; set; }

    public long AlunoId;
    public long ArquivoId;
}

当我尝试 Add-Migration 时出现异常:

System.InvalidOperationException: The properties expression 'e => new <>f__AnonymousType0`2(AlunoId = e.AlunoId, ArquivoId = e.ArquivoId)' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New With { t.MyProperty1, t.MyProperty2 }'.

这个异常没有任何意义。请注意,我在第一个代码示例的第四行配置了我的主键,它显然遵循异常中指定的匿名类型格式,所以我坚持这样做。

您的 AlunoIdAlunoAcessaArquivo 中的 ArquivoId 是字段,不是属性。那就是问题所在。使它们的属性如下:

public class AlunoAcessaArquivo : EntidadeBase {

    public virtual Aluno Aluno { get; set; }

    public virtual Arquivo Arquivo { get; set; }

    public long AlunoId { get; set; } // <-- You missed { get; set; }
    public long ArquivoId { get; set; } // <-- You missed { get; set; }
}