0

以下のDbContext、Model、およびControllerがあります(データベースが最初です)。これらは、相互に補完する 2 つのテーブル (operador と operator2) の参照先です。これらのモデル (テーブル "operador") を (いくつかのテーブル) に正常にマップしましたが、(テーブル "operador") と (テーブル "operador2") のマッピング参照が正常に機能しません。私はこれが正しく機能するために何も持っていないと思います。(下のコードとコントローラーが実行されたときの画像。) プロパティ "OpedradorId" と "Operador2Id" の間およびプロパティを介した関係が必要です。誰かが私を助けることができますか?

/**** DbContext ****/
public class OperadorContext : DbContext
{
    public OperadorContext() : base("name=CnxEasyLabWeb") { }

    public DbSet<OperadorModel> DbOperador { get; set; }
    public DbSet<OpCadastros1Model> DbCadastro { get; set; }
    public DbSet<OpCadastros2Model> DbCadastro2 { get; set; }

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

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

        modelBuilder.Entity<OpCadastros1Model>().HasKey(c => c.OperadorId);

        modelBuilder.Entity<OpCadastros1Model>()
            .HasRequired(c => c.Operador)
            .WithRequiredPrincipal(o => o.OpCadastros1);

        modelBuilder.Entity<OpCadastros1Model>()
            .HasRequired(c => c.OpCadastros2)
            .WithRequiredDependent(d => d.OpCadastro1);

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

/**** Models ****/
 public class OpCadastros1Model //: OpGeralModel
{
    [Key, Column("id")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int OperadorId { get; set; }

    public virtual OperadorModel Operador { get; set; }

    public virtual OpCadastros2Model OpCadastros2 { get; set; }
}

public class OpCadastros2Model
{
    [Key, Column("operador_id")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int OperadorId { get; set; }

    public virtual OpCadastros1Model OpCadastro1 { get; set; }
}

public class OperadorModel
{
    [Key, Column("id")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int OperadorId { get; set; }

    public virtual OpCadastros1Model OpCadastros1 { get; set; }

    [Column("nome")]
    [Required]
    public string Login { get; set; }
}

/**** Controller ****/
[HttpPost]
//[Authorize]
[ValidateAntiForgeryToken]
public ContentResult SalvarCadastros(OpCadastros1Model model)
{
    if (ModelState.IsValid)
    {
        #region Update
        if (model.OperadorId > 0)
        {
            var update = _db.DbCadastro.Single(op => op.OperadorId == model.OperadorId);
            _db.Entry(update).CurrentValues.SetValues(model);
            _db.Entry(update).State = EntityState.Modified;         
        }
        #endregion

        #region New
        else
        {
            _db.DbCadastro.Add(model);
        }
        #endregion

        _db.SaveChanges();
    }
    else
    { ... }

    ...
}

コントローラに渡された画像モデルは、OpCadastro2 に対して null を取得します

補足ですが、次のエラーが表示されます。

プロパティ「Operador2Id」はオブジェクトのキー情報の一部であり、変更できません。

4

1 に答える 1