即使附加了主键违规 - 实体框架

时间:2017-05-11 10:34:37

标签: asp.net-mvc database entity-framework exception primary-key

在汽车共享应用程序中,用户可以提供乘车,然后每次乘车都包含预订列表。

但是,当我尝试添加预订时,即使客户(已经添加)已经附加,它也无效...

例外情况是:

  

附加'CARS_Models.Models.Member'类型的实体失败,因为       另一个相同类型的实体已经具有相同的主键值。       使用“附加”方法或设置状态时可能会发生这种情况       实体到'未更改''已修改'如果图表中的任何实体有       冲突的关键值。这可能是因为一些实体是新的并且具有       尚未收到数据库生成的键值。在这种情况下,请使用'添加'       方法或'添加'实体状态以跟踪图形然后设置       非新实体的状态为'未更改''已修改'

方法是:

public void AddBooking(Booking b)
{
    using (var ctx = new DataContext(Settings.Default.db))
    {
        ctx.Members.Attach(b.Customer);
        ctx.Ride.Attach(b.Ride);

        ctx.Bookings.Add(b);

        ctx.SaveChanges();
    }
}

我在这个项目中所做的其他事情都很好,除了这个。我不明白为什么这不起作用..我也尝试在“添加”之后“附加”,但它也不起作用。

类属性:

public class Ride
{
    public int Id { get; set; }
    public Member Driver { get; set; }
    public int TotalSeats { get; set; }
    public DateTime Date { get; set; } = DateTime.Now;
    public String Departure { get; set; }
    public String Arrival { get; set; }
    public int Price { get; set; }
    public List<Booking> Bookings { get; set; } = new List<Bookings>();
}

public class Member
{
    public string Login { get; set; } //This is the PK
    public string Password { get; set; }
    public List<Ride> Rides { get; set; } = new List<Ride>(); //Rides that this member will drive.
    public List<Booking> Bookings { get; set; } = new List<Reservation>(); //All the bookings he made (for others ride).
}

public class Booking
{
    public int Id { get; set; }
    public Member Customer { get; set; } //The member who paid.
    public int Seats { get; set; } //Because someone can book more than 1 seat.
    public Ride Ride { get; set; } //The ride it concerns.
}

0 个答案:

没有答案