업데이트를 저장하려고 할 때 동일한 기본 키로 인해 엔티티 연결 오류

매튜 베르 스트라에 테

기존 데이터베이스 항목에 대한 업데이트를 저장하려고하는데 오류가 발생합니다.

동일한 유형의 다른 엔티티에 이미 동일한 기본 키 값이 있으므로 'FFInfo.DAL.Location'유형의 엔티티를 첨부하지 못했습니다. 이는 'Attach'메서드를 사용하거나 그래프의 항목에 충돌하는 키 값이있는 경우 항목의 상태를 '변경되지 않음'또는 '수정 됨'으로 설정할 때 발생할 수 있습니다. 일부 항목이 새 항목이고 아직 데이터베이스 생성 키 값을받지 않았기 때문일 수 있습니다. 이 경우 'Add'메소드 또는 'Added'항목 상태를 사용하여 그래프를 추적 한 다음 새 항목이 아닌 항목의 상태를 'Unchanged'또는 'Modified'로 적절하게 설정합니다.

이것은 내 컨트롤러의 코드입니다. 내가 사용하는 저장 방법은 문제없이 데이터를 업데이트하기 위해 몇 가지 다른 영역에서 사용하는 것과 동일합니다.

[HttpPost, ValidateAntiForgeryToken]
public ActionResult EditLocation(AddEditLocationVM model, HttpPostedFileBase MapFile)
{
    try
    {
        using (var db = new GeographyContext())
        {
            model.Sections = new SelectList(db.Sections.Where(s => s.ID > 1).OrderBy(s => s.Title), "ID", "Title").ToList();
            model.GeographyTypes = new SelectList(db.GeographyTypes.Where(gt => gt.SectionID == model.Section).OrderBy(gt => gt.Name), "ID", "Name").ToList();
            model.ParentLocations = new SelectList(db.Locations.Where(l => l.SectionID == model.Section).OrderBy(l => l.Name), "ID", "Name").ToList();


            if (MapFile != null)
            {
                if (FileHelper.IsNotValidImage(MapFile))
                {
                    ModelState.AddModelError("Invaalid File Type", "Images must be JPG, GIF, or PNG files.");
                }
            }

            if (ModelState.IsValid)
            {
                if (MapFile != null)
                {
                    var SectionRoute = db.Sections.Where(s => s.ID == model.Section).Select(s => s.Route).First();
                    model.MapFileID = FileHelper.UploadFile("Images/" + SectionRoute + "/Maps/" + MapFile.FileName.ToList(), "site", MapFile);
                }

                if (model.ParentLocation == 0)
                {
                    model.ParentLocation = null;
                }

                var UpdatedLocation = new Location()
                {
                    Description = model.Description,
                    GeographyTypeID = model.GeographyType,
                    ID = model.ID,
                    MapFileID = model.MapFileID,
                    Name = model.Name,
                    ParentLocationID = model.ParentLocation,
                    SectionID = model.Section
                };

                db.Entry(UpdatedLocation).State = EntityState.Modified;
                db.SaveChanges();
                ViewBag.Results = "Location information updated.";
            }

            return View(model);
        }
    }
    catch (Exception ex)
    {
        ErrorSignal.FromCurrentContext().Raise(ex);
        model.Sections = Enumerable.Empty<SelectListItem>();
        ViewBag.Results = "Error updating location informaiton, please try again later.";
        return View(model);
    }
}

이것은 내 위치 엔터티 코드입니다.

public class Location
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    [Required, Index("IX_Location", 1, IsUnique = true)]
    public string Name { get; set; }

    [Index("IX_Location", 2, IsUnique = true)]
    public Int16 SectionID { get; set; }

    [Column(TypeName = "varchar(MAX)")]
    public string Description { get; set; }

    public Int16 GeographyTypeID { get; set; }
    public int? MapFileID { get; set; }
    public int? ParentLocationID { get; set; }

    [ForeignKey("SectionID")]
    public Section Section { get; set; }

    [ForeignKey("GeographyTypeID")]
    public GeographyType GeographyType { get; set; }

    [ForeignKey("MapFileID")]
    public File Map { get; set; }

    [ForeignKey("ParentLocationID")]
    public Location ParentLocation { get; set; }

    public ICollection<LocationTransitionPoint> TransitionPoints { get; set; }
}

이와 같이 더 복잡한 엔티티를 업데이트하려고 시도하는 것은 이번이 처음이지만 웹에서 찾은 내용에서 잘못된 것을 볼 수 없습니다.

하미드 푸르 얌

Entity Framework의 메모리에는 동일한 기본 키를 가진 두 개의 엔터티 (동일한 유형)가있을 수 없습니다.

문제는

model.ParentLocations = new SelectList(db.Locations.Where(l => l.SectionID == model.Section).OrderBy(l => l.Name), "ID", "Name").ToList();

위의 줄을 당신은 어떻게 든로드 한 Location있는 자사의 IDIS를model.ID

그런 다음

var UpdatedLocation = new Location()
{
    Description = model.Description,
    GeographyTypeID = model.GeographyType,
    ID = model.ID,
    MapFileID = model.MapFileID,
    Name = model.Name,
    ParentLocationID = model.ParentLocation,
    SectionID = model.Section
};
db.Entry(UpdatedLocation).State = EntityState.Modified;

새 항목을 만들고 Location컨텍스트에 연결하려고하지만 (상태를 수정 됨으로 설정하여) Location정확한 기본 키가있는 다른 엔터티 UpdatedLocation를 메모리 어딘가에로드했으며 이로 인해 예외가 발생합니다.

위치를 가져 와서 로프티를 변경하십시오.

var UpdateLocation = db.Locations.First(l => l.ID == model.ID);
// var UpdateLocation = db.Locations.Find(model.ID); maybe a better option
UpdatedLocation.Description = model.Description;
UpdatedLocation.GeographyTypeID = model.GeographyType;
UpdatedLocation.MapFileID = model.MapFileID;
UpdatedLocation.Name = model.Name;
UpdatedLocation.ParentLocationID = model.ParentLocation;
UpdatedLocation.SectionID = model.Section;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

데이터 스키마를 처리하려고 할 때 "엔티티를 해결할 수 없음"오류

아티스트 엔티티를 저장하려고 할 때 BeanInstantiationException 오류

OneToOne 관계로 엔티티를 업데이트하거나 가져 오려고 할 때 오류 발생

동일한 유형의 다른 엔티티에 이미 동일한 기본 키 값이 있으므로 유형 'X'의 엔티티를 연결하지 못했습니다. 오류

Doctrine Fixture를로드 할 때 엔티티의 ArrayCollection으로 인한 오류

"같은 유형의 다른 엔티티가 이미 동일한 기본 키 값을 가지고 있기 때문에 '모델'유형의 엔티티를 연결하지 못했습니다."라는 예외가 발생하는 이유

EF, Automapper 예외, "같은 유형의 다른 엔티티가 이미 동일한 기본 키 값을 가지고 있기 때문에 ... 유형의 엔티티를 연결하지 못했습니다."

정수를 엔티티로 반환하려고 할 때 오류 발생

상위 엔티티를 다시 연결할 때 하위 엔티티 제거

MS SQL Compact Edition 용 모델을 준비 할 때 개체 / 엔티티를 연결하기 위해 네이티브 참조 및 ID 키를 동시에 사용하는 이유는 무엇입니까?

기본값이있는 케이스 클래스로 akka http unmarshall 엔티티를 사용할 때 오류

Entity Framework를 사용하여 엔터티의 단일 속성을 업데이트 할 때 오류 발생

saxon을 사용할 때 엔티티를 해결하는 방법

ASP.NET MVC-동일한 유형의 다른 엔티티에 이미 동일한 기본 키 값이 있으므로 'MODELNAME'유형의 엔티티를 연결하지 못했습니다.

동일한 유형의 다른 엔티티에 이미 동일한 기본 키 값이 있으므로 'ModelName'유형의 엔티티를 연결하지 못했습니다.

값을 업데이트 할 수 없음 : 엔티티의 상태를 '수정 됨'으로 변경하는 동안 '기본 키'에 임시 값이 있습니다.

c #에서 foreach로 데이터 엔티티를 반복적으로 업데이트 할 때 경합 오류

Cascade로 상위 엔티티를 저장할 때 하위 엔티티 ID를 얻으려면 어떻게해야합니까?

기본 청구 주소의 주소를 변경할 때 "하나 이상의 엔티티에 대한 유효성 검사 실패"오류

엔터티 간의 다 대다 관계를 저장하려고 할 때 빈 연결 테이블

분리 된 시나리오에서 독립 연결을 사용할 때 일대 다 엔터티 업데이트

내 저장소를 통해 업데이트 할 때 엔티티 중 하나가 엔티티 프레임 워크에 저장되지 않습니다.

optaplannercode의 엔티티에 해시 코드를 추가하려고 할 때 오류가 발생했습니다.

JPA로 업데이트 할 때 엔티티 필드를 제외하는 방법

OpenIddict-사용자 지정 키를 사용할 때 새로 고침 토큰 흐름으로 인해 엔터티 오류 발생

복합 키를 사용하여 엔티티를 저장하려고 할 때 SQLSyntaxErrorException 발생

기본 키 값을 업데이트하려고 할 때 오류 발생

Entity Framework Core 5를 사용하여 SaveChanges()를 호출할 때 관련 엔터티를 자동으로 업데이트하려면 어떻게 해야 합니까?

오류: CoreData에 엔터티를 추가할 때 "엔티티에서 키 경로 인덱스를 찾을 수 없습니다"

TOP 리스트

  1. 1

    Matlab의 반복 Sortino 비율

  2. 2

    ImageJ-히스토그램 빈을 변경할 때 최대, 최소 값이 변경되는 이유는 무엇입니까?

  3. 3

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  4. 4

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  5. 5

    원-사각형 충돌의 충돌 측면을 찾는 문제

  6. 6

    Oracle VirtualBox-설치를 위해 게스트를 부팅 할 때 호스트 시스템이 충돌 함

  7. 7

    어떻게 아무리 "나쁜", ANY의 SSL 인증서와 HttpClient를 사용하지합니다

  8. 8

    Ubuntu는 GUI에서 암호로 사용자를 만듭니다.

  9. 9

    잘못된 상태 예외를 발생시키는 Apache PoolingHttpClientConnectionManager

  10. 10

    Python 사전을 사용하는 동안 "ValueError : could not convert string to float :"발생

  11. 11

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  12. 12

    Vuetify 다중 선택 구성 요소에서 클릭 한 항목의 값 가져 오기

  13. 13

    C ++ VSCode에서 같은 줄에 중괄호 서식 지정

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    JQuery datepicker 기능이 인식되지 않거나 새 프로젝트에서 작동하지 않음

  16. 16

    cuda 11.1에서 Pytorch를 사용할 때 PyTorch가 작동하지 않음: Dataloader

  17. 17

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  18. 18

    상황에 맞는 메뉴 색상

  19. 19

    마우스 휠 JQuery 이벤트 핸들러에 대한 방향 가져 오기

  20. 20

    매개 변수에서 쿼리 객체를 선언하는 방법은 무엇입니까?

  21. 21

    Maven은 아이 프로젝트 대상 폴더를 청소하지

뜨겁다태그

보관