#asp.net-mvc #object #nested-lists
#asp.net-mvc #объект #вложенные списки
Вопрос:
У меня есть проект MVC3 в C#.Net . У меня есть Object1 со списком Object2…
//navigation Property(s)
public virtual ICollection<Object2> Object2s { get; set; }
Object2 имеет свойство Object1 и свойство Object1_Id
public int Object1_Id { get; set; }
public virtual Object1 Object1 { get; set; }
Когда я запускаю представление индекса для Object2, я получаю сообщение «Недопустимое имя столбца ‘Object1_Id1′». Weird….it ищет автоматическую колонку. Когда я удаляю Object1_Id из Object2, все работает нормально, пока я не перейду к сохранению в представлении создания. Затем он выдает сообщение об ошибке:
{"Cannot insert the value NULL into column 'Object1_Id', table 'dbo.Object2'; column does not allow nulls. INSERT fails.rnThe statement has been terminated."}
Я уверен, что мне просто не хватает простого шага. Есть идеи?
Комментарии:
1. Я предполагаю, что вы используете подход, основанный на коде?
2. @Водяной знак … да… есть идеи? Я не могу изменить базу данных из кода. администратор должен это сделать
Ответ №1:
Вы хотите использовать fluent API для внесения изменений. Вы можете сделать это в своем классе контекста БД. Посмотрите в нижнюю часть страницы по этой ссылке, чтобы увидеть пример использования fluent API.
public class ObjectContext : DbContext
{
public DbSet<Object1> Object1s{ get; set; }
public DbSet<Object2> Object2s{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Object2>()
.HasOptional(o => o.Object1).WithRequired(o => o.Object2);
}
}
Комментарии:
1. Я думаю, что я неправильно понял взаимосвязь между вашими объектами, когда я ответил этим, но дайте мне знать, что работает, и я отредактирую окончательный ответ, чтобы отразить его. Возможно, вам придется поменять местами объекты в инструкции ModelBuilder, чтобы заставить его работать именно так, как вы хотите.
Ответ №2:
Я понял свой вопрос. Когда я вызываю действие Create post на моем контроллере Object2, я извлекаю родительский Объект1, создаю идентификатор Guid для моего нового Объекта2, добавляю новый Объект2 к Объекту1.Коллекция Object2s, установите состояние Object1 на измененное, затем сохраните базу данных:
var object1ToUpdate = db.Object1s.Where(
aObject1 => aObject1.Id.Equals(myId)
).Include(aObject1 => aObject1.Object2s).Single();
string id = Guid.NewGuid().ToString();
Object2.Id = Guid.NewGuid();
object1ToUpdate.Object2s.Add(Object2);
db.Entry(object1ToUpdate).State = EntityState.Modified;
db.SaveChanges();