ASP.net MVC 4尝试删除记录时出错

问题描述 投票:2回答:1

我正在尝试删除客户记录。客户包含一个地址,我想我的关系时删除顺序有问题。基本上,我想删除一个客户端,如果他们有一个地址,也要删除它。这是我得到的完整的异常错误消息:

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);
    }
}

客户端控制器删除方法

[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");
    }

我的订单或删除的商品有问题吗?还是我只是做错了什么?我只希望能够删除有或没有地址的客户端。

c# database asp.net-mvc-4
1个回答
0
投票

将引用从地址删除到客户端。只需让您的参考从客户到地址,就可以。

© www.soinside.com 2019 - 2024. All rights reserved.