Я пытаюсь настроить функциональность редактирования, используя MVC3 и каркас сущностей 4. У меня есть свойство навигации, добавляемое к моей сущности клиента, чтобы позволить мне получить доступ к одной связанной сущности. У меня есть связанная сущность, определенная как виртуальная - это свойство Customer в сущности CustomerSite ниже
namespace CustomerOrders.Domain.Entities
{
public class CustomerSite
{
[HiddenInput(DisplayValue = false)]
[Key]
public int CustomerSiteId { get; set; }
[HiddenInput(DisplayValue = false)]
[DisplayName("Customer Id")]
public int CustomerId { get; set; }
[Required(ErrorMessage = "Please enter a unit no/street name")]
[DisplayName("Address Line 1")]
public string AddressLine1 { get; set; }
public virtual Customer Customer { get; set; }
}
}
Когда я пытаюсь сохранить изменения в объекте CustomerSite, я получаю следующее исключение
Ссылка на объект не установлена для экземпляра объекта.
Теперь, когда я проверяю значения модели, единственным нулевым значением является свойство навигации Customer, поэтому я предполагаю, что это вызывает ошибку? EF должен автоматически заполнить свойство внешнего ключа, так как поле идентификатора клиента заполнено правильно, когда я проверяю модель. Это поле, которое я ожидал, чтобы быть пустым, поскольку я ничего не сделал, чтобы вставить идентификатор клиента, для которого я не отображаю редактор в представлении.
Это мой метод сохранения
public void SaveCustomerSite(CustomerSite customerSite)
{
if (customerSite.CustomerSiteId == 0)
{
context.CustomerSites.Add(customerSite);
}
context.SaveChanges();
}
И вот как я определил отношения в контексте данных EF
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<CustomerSite>()
.HasRequired(x => x.Customer);
}
Кто-нибудь знает, будет ли свойство навигации иметь нулевое значение во время сохранения редактирования, что будет причиной исключения, и если да, то как я могу решить эту проблему?
Весь совет приветствуется.
РЕДАКТИРОВАТЬ ================
Это трассировка стека из исключения
at CustomerOrders.WebUI.Controllers.SiteAdminController.Edit(CustomerSite customerSite) in C:\Users\administrator\documents\visual studio 2010\Projects \CustomerOrders\CustomerOrders.WebUI\Controllers\SiteAdminController.cs:line 43
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15. <InvokeActionMethodWithFilters>b__12()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)