4

, 나는이 오류 메시지가 얻을 FOREIGN KEY 제약 조건과 충돌 :EF 코드 첫 번째 INSERT 문 제가 데이터베이스에 레코드를 삽입하려고하면

INSERT 문 외래 키 제약 "FK_dbo와 충돌을 .Order_dbo.AspNetUsers_UserId ". 충돌이 데이터베이스 "Test", 테이블 "dbo.AspNetUsers", 열 'Id'에서 발생했습니다. 문이 종료되었습니다.

면책 조항 :이 질문은 (here, herehere) 전에 요청을받은 것을 알고 있지만 답변을 아무도 제가 얻을이 오류를 수정 도움이되지 않습니다. 새로운 Order 삽입

[Table("Order")] 
public class Order 
{ 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key] 
    public int Id { get; set; } 

    [Required] 
    public string UserId { get; set; }  

    public virtual List<OrderDetails> OrderDetails { get; set; } 

    [ForeignKey("UserId")] 
    public virtual ApplicationUser User { get; set; } 
}  

[Table("OrderDetails")] 
public class OrderDetails 
{ 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key] 
    public int Id { get; set; } 

    [Required] 
    public int OrderId { get; set; } 

    [ForeignKey("OrderId")] 
    public virtual Order Order { get; set; } 
} 

public class ApplicationUser : IdentityUser 
{ 
    [MaxLength(15)] 
    public string FirstName { get; set; } 

    [MaxLength(15)] 
    public string LastName { get; set; } 

    [MaxLength(50)] 
    public string EmailAddress { get; set; } 

    public virtual List<Order> Orders { get; set; } 
} 

코드 : 여기

는 모델입니다 내가 볼 수있는 디버깅 할 때 _dbContext.SaveChanges(); // this is where the error msg is being thrown.

: 오류는이 라인에서 발생되는

public OrderDetails Add(dynamic addOrderDetails, string userId) 
{ 
    if (addOrderDetails.OrderId == null) 
    { 
     var order = new Order() 
     { 
      UserId = userId, 
      CreateDate = DateTime.Now, 
      Status = OStatus.InProgress, 
      Confirmed = (DateTime?)null, 
     }; 

     var newOrder = _dbContext.Orders.Add(order); 
     _dbContext.Entry(order).State = EntityState.Added; 
     _dbContext.SaveChanges(); // this is where the error msg is being thrown. 

     var orderDetails = new OrderDetails() 
     { 
      OrderId = newOrder.Id, 
      ServiceId = addOrderDetails.ServiceId, 
      EventStart = start, 
      EventEnd = end 
     }; 

     var newOrderDetails = _dbContext.OrderDetails.Add(orderDetails); 
     _dbContext.Entry(orderDetails).State = EntityState.Added; 
     _dbContext.SaveChanges(); 
    } 

    return null; 
} 

UserId = userId, 값이 있습니다.

그럼 왜이 오류 메시지가 표시됩니까?

+0

저는 항상 DB를 먼저 다뤘지만 새 주문에서 UserID를 충족시키는 ApplicationUsers에서 아무 것도 찾을 수없는 것처럼 보입니다. 처음에는 사용자가 ApplicationUsers 테이블에 없지만 해당 테이블에 대한 엔티티를 보면 UserID가있는 위치가 보이지 않습니다. –

+0

'MembershipProvider'를 대체하는'IdentityUser'와'SimpleMembershipProvider'는 기본적으로 UserId와 더 많은 필드를 포함합니다. 'asp.net-identity' 태그가 게시물에 추가되었습니다. – Quoter

답변

6

데이터베이스의 AspNetUsers 테이블에는 UserId 열의 값이 사용자가 userId으로 새 값으로 설정 한 값을 갖는 레코드가 있어야합니다. Order.UserIdAspNetUsers 테이블의 외래 키 ([ForeignKey("UserId")] 속성 참조 : Order 참조) 일 필요가 있습니다. 따라서 Order.UserId의 값이 이고 값이 인 경우 (! = null) AspNetUsers 테이블의 레코드에 해당하는 값이 있어야합니다.

예외는 이러한 레코드가 AspNetUsers 테이블에 없음을 의미합니다.

+0

그건 정확히 문제 였고 어제 알아 냈습니다. 'UserId'는 데이터베이스의'varchar'입니다 ('GUID' 형식). 무슨 일이 있었는지, 내가 데이터베이스를 삭제하고 그것을 다시 만들었지 만, IE에서 이전 데이터베이스가있을 때 '기억하기'상자를 선택했습니다. 그래서 다시 응용 프로그램을 시작했을 때 로그인했습니다. 그리고 이전 사용자 정보를 기억했습니다. 그래서 나는이 오류가 발생했습니다. 'UserId'가 데이타베이스에 실제로 존재하는지 확인하는 것을 성가 시게하지 않았습니다. – Quoter

+1

30 분 동안 이것을 봤어 ... 고마워! – Aries51

관련 문제