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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法在EF Code First中创建复合主键相关的知识,希望对你有一定的参考价值。

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

我正在为每个业务类使用单独的配置类,接收异常的是这一个:

public class AlunoAcessaArquivoMapeamento : EntityTypeConfiguration<AlunoAcessaArquivo> {
    public AlunoAcessaArquivoMapeamento() {
        ToTable(Regex.Replace(typeof(AlunoAcessaArquivo).Name, "([^A-Z])([A-Z])", "$1_$2").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);
    }
}

它配置的类是这个,它是一个简单的多对多关系表:

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:属性表达式'e => new <> f__AnonymousType0`2(AlunoId = e.AlunoId,ArquivoId = e.ArquivoId)'无效。表达式应代表一个属性:C#:'t => t.MyProperty'VB.Net:'Punction(t)t.MyProperty'。当指定多个属性时,使用匿名类型:C#:'t => new {t.MyProperty1,t.MyProperty2}'VB.Net:'Function(t)New With {t.MyProperty1,t.MyProperty2}'。

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

观察:我知道我的代码包含葡萄牙语文本,我可以将其翻译成英文,但前提是它是绝对必要的。

以上是关于无法在EF Code First中创建复合主键的主要内容,如果未能解决你的问题,请参考以下文章

如何在EF6 Code First中创建与枚举对应的表?

oracle 用户在 EF6 Code First 中创建数据库和执行挂起迁移的最低权限是啥

没有导航属性的EF Code First外键

EF Core开发模式之Code First

EF Code-First如何使用复合键从表中读取A.

EF 4.1 中使用 Code First 的 ComplexType 集合属性