以下の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
{ ... }
...
}
補足ですが、次のエラーが表示されます。
プロパティ「Operador2Id」はオブジェクトのキー情報の一部であり、変更できません。