데이터베이스에 쓸 때이 오류가 발생합니다.
ReferentialConstraint의 종속 속성은 저장소 생성 열에 매핑됩니다. 열 : ‘PaymentId’.
public bool PayForItem(int terminalId, double paymentAmount,
eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId)
{
using (var dbEntities = new DatabaseAccess.Schema.EntityModel())
{
int pinnumber = 0;
long pinid = 1; //getPinId(terminalId,ref pinnumber) ;
var payment = new DatabaseAccess.Schema.Payment();
payment.CategoryId = CategoryId;
payment.ItemCategoryId = CategoryItemId;
payment.PaymentAmount = (decimal)paymentAmount;
payment.TerminalId = terminalId;
payment.PinId = pinid;
payment.HSBCResponseCode = "";
payment.DateActivated = DateTime.Now;
payment.PaymentString = "Payment";
payment.PromotionalOfferId = 1;
payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid;
//payment.PaymentId = 1;
dbEntities.AddToPayments(payment);
dbEntities.SaveChanges();
}
return true;
}
스키마는 다음과 같습니다.
답변
테이블간에 잘못된 열 관계를 정의했을 수 있습니까? 다른 열과 하나는 자동 숫자로 설정되었습니다.
나에게 일어난 일입니다.
답변
이 오류는 지원되지 않는 관계를 사용 중이거나 매핑에 오류가 있음을 나타냅니다. 귀하의 코드는 아마도 오류와 절대적으로 관련이 없습니다.
이 오류는 종속 엔터티의 외래 키 속성이 저장소 생성으로 정의 된 엔터티간에 일부 관계가 있음을 의미합니다. 저장소 생성 속성은 데이터베이스에 채워집니다. EF는 저장소 생성 속성을 외래 키 (기본 키의 계산 된 속성)로 지원하지 않습니다.
답변
나는 같은 문제가 있었다. 여기에 제공된 답변을 바탕으로 추적하고 해결할 수 있었지만 아래에 설명 된 이상한 문제가있었습니다. 나중에 누군가에게 도움이 될 수 있습니다.
내 종속 테이블에서 외래 키 열이 StoreGeneratedPattern = “Identity”로 설정되었습니다. “없음”으로 변경해야했습니다. 불행히도 디자이너 내부에서 그렇게하는 것은 전혀 작동하지 않았습니다.
디자이너가 생성 한 XML (SSDL)을 살펴 보았는데 이러한 속성이 여전히 존재하므로 수동으로 제거했습니다. 또한 데이터베이스의 열을 수정해야했습니다 (CREATE TABLE SQL에서 Identity (1,1) 제거)
그 후 문제가 사라졌습니다.
답변
나는 같은 문제가 있었고 SQL Server에서 테이블 디자인을 파헤친 후 실수로 테이블의 기본 키를 외래 키로 설정했다는 사실을 발견했습니다.
이 이미지에서 JobID가 테이블의 기본 키이지만 실수로 외래 키임을 알 수 있습니다.
답변
내 문제는 구성에서 기본 키의 중복 정의로 인해 발생했습니다.
this
.Property(p => p.Id)
.HasColumnName(@"id")
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) // this is redundant when you want to configure a One-to-Zero-or-One relationship
.HasColumnType("int");
이 줄 제거
.HasDatabaseGeneratedOption (DatabaseGeneratedOption.Identity)
관계를 정의하기에 충분합니다.
// Configure Student & StudentAddress entity
modelBuilder.Entity<Student>()
.HasOptional(s => s.Address) // Mark Address property optional in Student entity
.WithRequired(ad => ad.Student); // mark Student property as required in StudentAddress entity. Cannot save StudentAddress without Student
답변
Payment와 다른 테이블 / 엔터티 간의 관계를 다시 확인하십시오. 문제가 숨겨져있을 가능성이 가장 높기 때문에 PaymentId를 포함하지 않아야하는 항목을 포함합니다.
SQL Server Management Studio에서 외래 키를 만들 때 기본 키가 기본값으로 설정되고 상위 테이블이 변경되면이 기본값이 되돌려 지므로 “테이블 및 열”창에서 올바른 순서로 값을 변경해야합니다.
또한 문제가있는 관계를 수정 한 후에는 모델에 대한 간단한 “새로 고침”이 모델에서 잘못된 관계를 올바르게 제거하지 못할 가능성이 높으며 ” 수정 ” 후에도 동일한 오류가 발생합니다 . 따라서 새로 고침을 수행하기 전에 모델에서 직접 수행하십시오. (나는 이것을 어려운 방법으로 발견했습니다.)
답변
당신이 당신의 관계를 확인하고 거기에서 좋은 경우.
edmx에서 테이블을 삭제 한 다음 데이터베이스에서 업데이트하십시오. 이렇게하면 수동으로 업데이트 할 필요가 없습니다.