2013-03-06 3 views
1

Я пытаюсь удалить запись клиента. Клиент содержит адрес, и я предполагаю, что у меня возникают проблемы с порядком удаления, когда дело касается их отношений. В основном я хочу удалить клиента и, если у вас есть адрес, удалить его вместе с ним. Это полное сообщение об ошибке исключения, которое я получаю:ASP.net MVC 4 Ошибка при попытке удалить запись

DbUpdateException был необработанным кодом пользователя

Произошла ошибку при сохранении объектов, которые не выставляют внешний ключ свойства для их отношений. Свойству EntityEntries будет присвоено значение null, потому что один объект не может быть идентифицирован как источник исключения. Обработка исключений при сохранении может быть сделана проще, выставляя свойства внешнего ключа в ваших типах объектов. Подробнее см. В разделе InnerException.

Модели

public class Address 
{ 
    [Required] 
    public int Id { get; set; } 

    [DataType(DataType.Text)] 
    [Display(Name = "Street Address")] 
    public string StreetAddress { get; set; } 

    [DataType(DataType.Text)] 
    [Display(Name = "Postal Code")] 
    public string PostalCode { get; set; } 

    [DataType(DataType.Text)] 
    public string City {get; set; } 

    [DataType(DataType.Text)] 
    public string Province {get; set;} 

    public virtual Clients client { get; set; } 

} 
public class Clients 
{ 
    [Required] 
    public long Id { get; set; } 

    [Required] 
    [DataType(DataType.Text)] 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 

    [Required] 
    [DataType(DataType.Text)] 
    [Display(Name = "Last Name")] 
    public string LastName { get; set; } 

    [Required] 
    [DataType(DataType.PhoneNumber)] 
    [Display(Name = "Phone ")] 
    public string PhoneNumber { get; set; } 

    public virtual Address Address {get; set;} 

    [Display(Name = "Email List")] 
    public Boolean EmailList { get; set; } 

    [DataType(DataType.EmailAddress)] 
    [Display(Name = "E-mail")] 
    public string Email { get; set; } 

    [DataType(DataType.Text)] 
    [Display(Name = "Hair Type")] 
    public string HairType { get; set; }   

    [DataType(DataType.MultilineText)] 
    public string Description { get; set; } 
} 

Контекст Класс

public class VolumeV2Context : DbContext 
{ 
    public DbSet<GiftCard> GiftCards { get; set; } 
    public DbSet<Clients> Clients { get; set; } 
    public DbSet<Address> Address { get; set; } 
    public DbSet<Inventory> Inventories { get; set; } 


    protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Clients>() 
      .HasOptional(j => j.Address) 
      .WithOptionalDependent() 
      .WillCascadeOnDelete(true); 

     /* modelBuilder.Entity<Address>() 
      .HasRequired(j => j.client) 
      .WithRequiredDependent() 
      .WillCascadeOnDelete(true) ;       
     */ 


     base.OnModelCreating(modelBuilder); 
    } 
} 

Контроллер Client Удалить Метод

[HttpPost, ActionName("Delete")] 
    public ActionResult DeleteConfirmed(long id) 
    { 
     //find the client 
     Clients clients = db.Clients.Find(id); 

     //find the address 
     Address address = db.Address.Find(clients.Address.Id); 

     // set the reference to null? 
     address.client = null;      

     //remove the address foreign key? 
     clients.Address = null; 

     //Apply to db? 
     db.Entry(address).CurrentValues.SetValues(address); 
     db.Entry(clients).CurrentValues.SetValues(clients); 

     db.Address.Remove(address); 

     //remove the client 
     db.Clients.Remove(clients); 
     //exception error happens here 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

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

+1

plz опубликовать внутреннее исключение, которое вы получаете при операции удаления –

+0

извините. Я отправил его сейчас – Fpanico

+0

, когда вы получите копию исключения из внутреннего сообщения об исключении и опубликуете его здесь –

ответ

0

Удалить ссылку с адреса клиенту. Просто держите свою ссылку от клиента на адрес, который будет делать.

Смежные вопросы