Трябва да картографирам два обекта с едно към нула или едно отношение. когато създам основен обект, той работи.
Имам следните модели:
//Principal class
public class Sugerencia
{
public int ID { get; set; }
[DisplayName("Título")]
public string Titulo { get; set; }
//More properties simplified for example
}
//Related class
public class Resultado
{
[ScaffoldColumn(false)]
public int SugerenciaID { get; set; }
[ScaffoldColumn(false)]
public int ID { get; set;}
//More properties
}
Това е моят клас DbContext
public class SugerenciaContext : DbContext
{
public SugerenciaContext() : base("SugerenciaContext")
{
}
public DbSet<Sugerencia> Sugerencias { get; set; }
public DbSet<Resultado> Resultados { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Resultado>()
.HasRequired(r => r.Sugerencia)
.WithOptional(s => s.Resultado);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
Обърнете внимание на отмяната на OnModelCreate за карта на връзката.
Това са действията за създаване на ResultadoController (POST и GET)
//GET
public ActionResult Create(int? id)
{
ViewBag.ID = new SelectList(db.Sugerencias, "ID", "Titulo");
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
//I am retrieving the principal model instance to set resultado.Sugerencia property.
Sugerencia sugerencia = db.Sugerencias.Find(id);
if (sugerencia == null)
{
return HttpNotFound();
}
Resultado resultado = new Resultado();
resultado.Sugerencia = sugerencia;
return View(resultado);
}
//POST
public ActionResult Create([Bind(Include = "ID,SugerenciaID,Responsable,Resultados,Fecha")] Resultado resultado, string status)
{
if (ModelState.IsValid)
{
resultado.Fecha = System.DateTime.Now;
Sugerencia sugerencia = db.Sugerencias.Find(resultado.ID);
if (sugerencia == null)
{
return HttpNotFound();
}
sugerencia.Status = status;
//Here I am modifying the state property of Sugerencia model.
db.Entry(sugerencia).State = EntityState.Modified;
db.Entry(resultado).State = resultado.ID == 0 ? EntityState.Added : EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ID = new SelectList(db.Sugerencias, "ID", "Titulo", resultado.ID);
return View(resultado);
}
Грешката, която получавам, се задейства в db.SaveChenges();
line. Когато се опитвам да добавя нов модел Resultado. Въпреки това, когато извикам действието Create за главен екземпляр, който вече има свързан обект в DB, той пресъздава обекта, пренаписвайки стойностите в DB, както се очаква.
В изгледа за създаване на контролера Resultado трябва да актуализирам едно свойство на модела Sugerencia.
Изявлението за актуализация, вмъкване или изтриване на магазина засегна неочакван брой редове (0). Обектите може да са били променени или изтрити след зареждането на обектите
Забележка: Вмъквам или променям екземпляра. Отстранявам грешки чрез командния прозорец и задавам точка на прекъсване на този ред. При отпечатване на променливи resultado и sugerencia всички свойства изглеждат валидни.
Благодаря, че обмислихте въпроса ми.
int?
- person Ashley Medway   schedule 29.05.2015