I have the below DbContext, Model and Controller (database first). These are referents for two tables (operador and operador2), that complement each other. I mapped these models (table "operador") with (some table) successfuly, but the mapping reference for (table "operador") and (table "operador2") not works fine. I think I have less anything for this it work correctly. (Below the code and a image when the controller has executed.) I need a relationship between and through properties "OpedradorId" and "Operador2Id". Somebody can help me?
/**** 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
{ ... }
...
}
Complementary, I receive this error:
The property 'Operador2Id' is part of the object's key information and can not be modified.