У меня есть три класса, вот так:
[DataContract]
public class ApplicationDto : BusinessBase<int>
{
/// <summary>
/// Gets or sets the name.
/// </summary>
/// <value>The name.</value>
[DataMember]
public string Name { get; set; }
/// <summary>
/// Gets or sets the description.
/// </summary>
/// <value>The description.</value>
[DataMember]
public string Description { get; set; }
/// <summary>
/// Gets or sets the development startdate.
/// </summary>
/// <value>The development startdate.</value>
[DataMember]
public DateTime DevelopmentStartdate { get; set; }
/// <summary>
/// Gets or sets the launch date.
/// </summary>
/// <value>The launch date.</value>
[DataMember]
public DateTime LaunchDate { get; set; }
}
[DataContract]
public class CustomerDto : BusinessBase<int>
{
/// <summary>
/// Gets or sets the name of the user.
/// </summary>
/// <value>The name of the user.</value>
[DataMember()]
public string UserName { get; set; }
/// <summary>
/// Gets or sets the first name.
/// </summary>
/// <value>The first name.</value>
[DataMember()]
public string FirstName { get; set; }
/// <summary>
/// Gets or sets the last name.
/// </summary>
/// <value>The last name.</value>
[DataMember()]
public string LastName { get; set; }
/// <summary>
/// Gets or sets the name of the company.
/// </summary>
/// <value>The name of the company.</value>
[DataMember()]
public string CompanyName { get; set; }
/// <summary>
/// Gets or sets the phone.
/// </summary>
/// <value>The phone.</value>
[DataMember()]
public string Phone { get; set; }
/// <summary>
/// Gets or sets the email.
/// </summary>
/// <value>The email.</value>
[DataMember()]
public string Email { get; set; }
/// <summary>
/// Gets or sets the address1.
/// </summary>
/// <value>The address1.</value>
[DataMember()]
public string Address1 { get; set; }
/// <summary>
/// Gets or sets the address2.
/// </summary>
/// <value>The address2.</value>
[DataMember()]
public string Address2 { get; set; }
/// <summary>
/// Gets or sets the city.
/// </summary>
/// <value>The city name.</value>
[DataMember()]
public string City { get; set; }
/// <summary>
/// Gets or sets the state region.
/// </summary>
/// <value>The state region.</value>
[DataMember()]
public string StateRegion { get; set; }
/// <summary>
/// Gets or sets the zip code.
/// </summary>
/// <value>The zip code.</value>
[DataMember()]
public string ZipCode { get; set; }
/// <summary>
/// Gets or sets the country id.
/// </summary>
/// <value>The country id.</value>
[DataMember()]
public int CountryId { get; set; }
/// <summary>
/// Gets or sets the ean number.
/// </summary>
/// <value>The ean number.</value>
[DataMember()]
public string EanNumber { get; set; }
/// <summary>
/// Gets or sets the vat number.
/// </summary>
/// <value>The vat number.</value>
[DataMember()]
public string VatNumber { get; set; }
/// <summary>
/// Gets or sets the time zone id.
/// </summary>
/// <value>The time zone id.</value>
[DataMember()]
public string TimeZoneId { get; set; }
}
[DataContract]
public class ApplicationInstanceDto : BusinessBase<int>
{
/// <summary>
/// Gets or sets the customer id.
/// </summary>
/// <value>The customer id.</value>
[DataMember]
public int CustomerId { get; set; }
/// <summary>
/// Gets or sets the application id.
/// </summary>
/// <value>The application id.</value>
[DataMember]
public int ApplicationId { get; set; }
/// <summary>
/// Gets or sets the application.
/// </summary>
/// <value>The application.</value>
[DataMember]
public ApplicationDto Application { get; set; }
/// <summary>
/// Gets or sets the customer.
/// </summary>
/// <value>The customer.</value>
[DataMember]
public CustomerDto Customer { get; set; }
/// <summary>
/// Gets or sets the initial version id.
/// </summary>
/// <value>The initial version id.</value>
[DataMember]
public int InitialVersionId { get; set; }
/// <summary>
/// Gets or sets the current version id.
/// </summary>
/// <value>The current version id.</value>
[DataMember]
public int CurrentVersionId { get; set; }
/// <summary>
/// Gets or sets the name of the unique instance.
/// </summary>
/// <value>The name of the unique instance.</value>
[DataMember]
public string UniqueInstanceName { get; set; }
}
Допустим, в моей базе данных есть 2 приложения и несколько клиентов.
В моем веб-приложении MVC я показываюсписок приложений и щелкните ссылку «Создать экземпляр».
Я выбираю клиента, для которого этот экземпляр, и нажимает кнопку Сохранить.
В EF Code First по умолчанию всегда сохраняется соответствующийобъекты - в данном случае Приложение и Клиент.
Поскольку я делаю это с помощью вызовов AJAX, я отправляю только идентификатор приложения и клиента обратно на мой Контроллер.Глядя на базу данных, это все, что мне нужно для создания ApplicationInstance.
Я «обманываю», делая следующее:
var appInstance = new ApplicationInstanceDto();
appInstance.InitialVersionId = 1;
appInstance.CurrentVersionId = 2;
appInstance.ApplicationId = 1;
appInstance.CustomerId = 1;
appInstance.UniqueInstanceName = "test";
db.ApplicationInstances.Add(appInstance);
db.SaveChanges();
Но, конечно, я получаю исключение из базы данных, сообщая мнечто столбец имени в таблице «Приложения» не допускает пустое значение.
Можно ли как-то обмануть и избежать вставки связанных объектов целиком?
У меня есть отношения внешнего ключа итакое настроено правильно.