【问题标题】:Can't make a composed primary key on EF Code First无法在 EF Code First 中创建复合主键
【发布时间】:2019-04-08 12:21:24
【问题描述】:

我正在尝试在 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: 'Function(t) t.MyProperty'。指定多个属性时使用匿名类型:C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New With { t.MyProperty1, t.MyProperty2 }'。

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

【问题讨论】:

    标签: c# entity-framework ef-code-first entity-framework-migrations


    【解决方案1】:

    AlunoAcessaArquivo 中的 AlunoIdArquivoId 是字段,而不是属性。那就是问题所在。使它们的属性如下:

    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; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多