0

我有这些类,然后需要以 1:1 的关系进行映射,但我对 fluent API 还没有很好的了解,我在运行时收到了这个错误(调试):

“错误 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 para algum AssociationSet 或 EntitySets 参与者 de uma associação de chave estrangeira no lado conceitual。”

就像是:

“错误 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

I think your issue here is a need to specify the key to use explicitly as convention for how they are to be named is quite strict (it expects a column named ID - I think), and something like this should fix the problem:

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

After I wrote that I and looked for what was likely your ID, I realized the ID column is the same name in the Model for both objects...

于 2013-08-30T15:54:03.800 回答