[c#] ReferentialConstraint의 종속 속성은 저장소 생성 열에 매핑됩니다.

데이터베이스에 쓸 때이 오류가 발생합니다.

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에서 테이블 디자인을 파헤친 후 실수로 테이블의 기본 키를 외래 키로 설정했다는 사실을 발견했습니다.

SQL 서버 테이블 디자인 흐름

이 이미지에서 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)


http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx

관계를 정의하기에 충분합니다.

// 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에서 테이블을 삭제 한 다음 데이터베이스에서 업데이트하십시오. 이렇게하면 수동으로 업데이트 할 필요가 없습니다.