CTP5 EF Code First Question

Вы можете найти исходный код, демонстрирующий эту проблему, @ http://code.google.com/p/contactsctp5/

У меня есть три объекта модели. Контакт, КонтактИнфо, КонтактИнфоТипе. Если у контакта много контактной информации, и каждая контактная информация является контактной информацией. Думаю, довольно просто. Проблема, с которой я сталкиваюсь, - это когда я перехожу к редактированию контактного объекта. Я вытащил его из своего хранилища контактов. Затем я запускаю «UpdateModel (контакт);» и он обновляет объект всеми значениями из моей формы. не может быть изменено, потому что один или больше свойств внешнего ключа не допускающий значения NULL. Когда вносятся изменения в отношения, связанные для свойства внешнего ключа установлено значение NULL ценность. Если внешний ключ не поддержка нулевых значений, новый отношения должны быть определены, свойство внешнего ключа должно быть назначено другое ненулевое значение или несвязанный объект должен быть удален.

Похоже, что после того, как я вызываю модель обновления, мои ссылки обнуляются, и это, кажется, все сломает? Приветствуются любые мысли о том, как исправить. Спасибо.

Вот мои модели:

public partial class Contact {
    public Contact() {
      this.ContactInformation = new HashSet();
    }

    public int ContactId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection ContactInformation { get; set; }
 }

 public partial class ContactInformation {
    public int ContactInformationId { get; set; }
    public int ContactId { get; set; }
    public int ContactInfoTypeId { get; set; }
    public string Information { get; set; }

    public virtual Contact Contact { get; set; }
    public virtual ContactInfoType ContactInfoType { get; set; }
  }

  public partial class ContactInfoType {
    public ContactInfoType() {
      this.ContactInformation = new HashSet();
    }

    public int ContactInfoTypeId { get; set; }
    public string Type { get; set; }

    public virtual ICollection ContactInformation { get; set; }
  }

Действие моего контроллера:

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(Contact person) {
      if (this.ModelState.IsValid) {
        var contact = this.contactRepository.GetById(person.ContactId);
        UpdateModel(contact);
        this.contactRepository.Save();
        TempData["message"] = "Contact Saved.";
        return PartialView("Details", contact);
      } else {
        return PartialView(person);
      }
    }

Код контекста:

protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) {
      modelBuilder.Entity()
        .HasMany(c => c.ContactInformation)
        .WithRequired()
        .HasForeignKey(c => c.ContactId);

      modelBuilder.Entity()
        .HasMany(c => c.ContactInformation)
        .WithRequired()
        .HasForeignKey(c => c.ContactInfoTypeId);
    }

6
задан Kyle Rogers 10 March 2011 в 00:26
поделиться