0

これらのクラスがあり、1:1 の関係でマッピングする必要がありますが、流暢な API についてまだ十分な知識がなく、実行時にこのエラーを受け取りました (デバッグ):

"erro 3015: Problema nos fragmentos do mapeamento a partir das linhas 6, 22, 191:Restrição de chave estrangeira 'OperadorModel_OpCadastros1' da tabela OperadorModel (OpCadastros1_OperadorId) para a tabela OperadorModel (id):: Mapeamento insuficiente: a chave estrangeira deve ser mapeadaパラ アルガム AssociationSet または EntitySets の参加者は、何の意図もありません。

何かのようなもの:

「エラー 3015: 行 6、22、191 からフラグメントをマッピングする際の問題: テーブル OperadorModel (id) の外部キー制約 'OperadorModel_OpCadastros1' テーブル OperadorModel (OpCadastros1_OperadorId) :: 不十分なマッピング: 一部の AssociationSet EntitySets に対して外部キーをマップする必要がありますまたは概念の外部キー アソシエーションに参加しています。」

この問題を解決するには?

コードは以下です。ありがたいことに、私の下手な英語で申し訳ありません。

public class OperadorModel
{
    public int OperadorId { get; set; }

    public string Login { get; set; }

    public bool TiraMenu { get; set; }

    public virtual OpCadastros1Model OpCadastros1 { get; set; }
}

public class OpCadastros1Model
{
    public int OperadorId { get; set; }

    public virtual OperadorModel Operador { get; set; }

    #region Apoio

    [Column("cad_apoio_ac")]
    [Display(Description = "Acessar", GroupName = "Cadastros", Name = "Laboratórios de Apoio")]
    public bool AcApoio { get; set; }

    [Column("cad_apoio_ad")]
    [Display(Description = "Adicionar", GroupName = "Cadastros", Name = "Laboratórios de Apoio")]
    public bool AdApoio { get; set; }

    [Column("cad_apoio_md")]
    [Display(Description = "Modificar", GroupName = "Cadastros", Name = "Laboratórios de Apoio")]
    public bool MdApoio { get; set; }

    [Column("cad_apoio_co")]
    [Display(Description = "Consultar", GroupName = "Cadastros", Name = "Laboratórios de Apoio")]
    public bool CoApoio { get; set; }

    [Column("cad_apoio_ex")]
    [Display(Description = "Excluir", GroupName = "Cadastros", Name = "Laboratórios de Apoio")]
    public bool ExApoio { get;  set; }

    #endregion
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

    modelBuilder.Entity<OperadorModel>()
        .HasKey(op => op.OperadorId);

    modelBuilder.Entity<OpCadastros1Model>()
        .HasKey(cad => cad.OperadorId)
        .HasRequired(cad => cad.Operador)
        .WithRequiredPrincipal(cad => cad.OpCadastros1);

    modelBuilder.Entity<OperadorModel>().ToTable("operador", "public");
    modelBuilder.Entity<OpCadastros1Model>().ToTable("operador", "public");
}
4

1 に答える 1

1

ここでの問題は、名前を付ける方法の規則として明示的に使用するキーを指定する必要があると思います(IDという名前の列が必要です-私は思います)、このようなものは問題を解決するはずです:

modelBuilder.Entity<OperadorModel>()
    .HasKey(op => op.OperadorId)
    .HasOptional(op => op.OpCadastros1)
    .Map(f => f.MapKey("OperadorID"));

私が書いた後、あなたのIDである可能性が高いものを探した後、ID列が両方のオブジェクトのモデルで同じ名前であることに気付きました...

于 2013-08-30T15:54:03.800 に答える