2011-11-01 2 views
1

Entity Framework에서 다음과 같은 오류가 발생하며 그 원인을 파악할 수 없습니다.Entity Framework 4.1 잘못된 개체 이름

잘못된 개체 이름 'dbo.User'

데이터베이스의 실제 테이블 이름은 사용자라고 나는 마우스 오른쪽 버튼으로 클릭하고 선택 '데이터베이스에서 업데이트 모델'내가 주위에 다른 여섯이에 의해 내 엔터티 모델에 추가 모델은 복수형 테이블 이름을 갖고 동일한 문제없이 동일한 방식으로 업데이트되는 동일한 데이터베이스에 모두 연결되는 프로젝트입니다. 어떤 이유로 EF는 업데이트를 수행 할 때 테이블 이름에서 's'을 제거합니다. 아래의 코드에서 볼 수 있듯이 문제없이 작동하는 업데이트 전에 선택을 수행합니다.

또한 엔티티를 삭제하고 '생성 된 객체 이름을 Pluralize or singularize'를 선택 취소하여 다시 만들려고했습니다. 그러나 문제는 여전히 남아 있습니다.

어떤 아이디어라도 좋을 것입니다.

public void Update(User updatedUser) 
{ 
    using (var context = CreateUserContext()) 
    { 
     var entity = context.UserEntities 
      .Where(u => u.UserId == updatedUser.UserId) 
      .SingleOrDefault(); 

     if (entity != null) 
     { 
      entity.Name = updatedUser.Name; 
      entity.Description = updatedUser.Description; 
      entity.LastModifiedById = updatedUser.LastModifiedById; 
      entity.IsDeleted = updatedUser.IsDeleted; 

      context.UserEntities.ApplyCurrentValues(entity); 
      context.SaveChanges(); 
     } 
    } 
} 

답변

1

사용자를 선택할 수 있다는 사실은 EF 매핑 괜찮 믿고 날 리드.

dbo.User을 테이블 이름으로 잘못 사용하는 테이블에서 트리거를 확인하십시오. 보조 노트로

, 당신이 할 수있는 두 가지가이 같은 문제를 진단하는 데 도움이 :

  1. 이 SSMS에서 수동으로 행을 업데이트하십시오. 이 문제는 EF 나 SQL Server (트리거, 제약 조건 등)와 관련이 있는지를 알려줍니다.

  2. EF가 데이터베이스로 보내는 SQL 문을 검사 할 때 사용합니다.

(이 시점에서) 당신이 EF 4.1와 함께 작동하도록 use the latest beta 필요합니다하지만 당신은 또한, LINQPad를 사용할 수 있으며, SQL 문을 확인하십시오.

+0

대단히 감사합니다. 나는 SQL 프로파일 러를 사용했고 업데이트로 모든 것이 잘 어울렸다. 다음 작업을 볼 수 있었고, 마지막 수정 시간 인 derrr !!을 업데이트하기 위해 테이블을 트리거했는지 잊어 버렸습니다 !! 다시 한번 감사드립니다. – Cragly

+0

@Cragly, 도움이 되었기 때문에 기쁘게 생각합니다. 특히 애플리케이션의 다른 부분에 집중할 때 트리거에서 코드를 잊어 버리는 것이 쉽다는 것을 알고 있습니다. –