Asp.net mvc 主键冲突(即使已连接)-实体框架
在汽车共享应用程序中,用户可以提供一次乘坐,然后每次乘坐包含一个预订列表 但当我尝试添加预订时,它不起作用,即使客户(已添加)已附加 例外情况是:Asp.net mvc 主键冲突(即使已连接)-实体框架,asp.net-mvc,database,entity-framework,exception,primary-key,Asp.net Mvc,Database,Entity Framework,Exception,Primary Key,在汽车共享应用程序中,用户可以提供一次乘坐,然后每次乘坐包含一个预订列表 但当我尝试添加预订时,它不起作用,即使客户(已添加)已附加 例外情况是: public void AddBooking(Booking b) { using (var ctx = new DataContext(Settings.Default.db)) { ctx.Members.Attach(b.Customer); ctx.Ride.Attach(b.Ride);
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();
}
}
附加类型为“CARS\u Models.Models.Member”的实体失败,因为
相同类型的另一个实体已具有相同的主键值。
当使用“附加”方法或设置
如果图形中的任何实体已更改,则将实体更改为“未更改”或“已修改”
相互冲突的键值。这可能是因为一些实体是新的,并且
尚未收到数据库生成的键值。在这种情况下,使用'Add'
方法或添加的实体状态来跟踪图形,然后设置
将非新实体的状态适当地更改为“未更改”或“已修改”
方法是:
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.
}
公共级骑乘
{
公共int Id{get;set;}
公共成员驱动程序{get;set;}
公共整数{get;set;}
公共日期时间日期{get;set;}=DateTime.Now;
公共字符串离开{get;set;}
公共字符串到达{get;set;}
公共整数价格{get;set;}
公共列表预订{get;set;}=new List();
}
公共班级成员
{
公共字符串登录名{get;set;}//这是PK
公共字符串密码{get;set;}
公共列表骑乘{get;set;}=new List();//此成员将驾驶的骑乘。
公共列表预订{get;set;}=new List();//他(为其他人)所做的所有预订。
}
公共课预订
{
公共int Id{get;set;}
公共成员客户{get;set;}//支付的成员。
public int Seats{get;set;}//因为某人可以预订多个座位。
公共骑乘{get;set;}//与之相关的骑乘。
}
这可能最有帮助b.Customer
和b.Ride.Driver
是不同的成员
实例,具有相同的PK登录名
。哦,是的,对于我做的测试,它们是相同的,你认为这是问题所在吗?我会尝试与不同的成员…天哪。。。这就是问题所在。。。我不知道你是怎么猜到的,但谢谢你:D。。。非常令人印象深刻:p。。。这很可能有帮助。客户和驾驶员是不同的成员,具有相同的PKLogin
。哦,是的,对于测试,我将它们设置为相同的,你认为这是问题所在吗?我会尝试与不同的成员…天哪。。。这就是问题所在。。。我不知道你是怎么猜到的,但谢谢你:D。。。非常令人印象深刻:p。。。