초기 작성 후 개발자가 수동으로 또는 프로그래밍 방식으로 코드의 기본 키를 업데이트하지 못하게하는 검사를 구현하는 데 문제가 있습니다.Entity Framework OnChanging 기본 키 보호
partial class User
{
public User()
{
this.UserId = sGuid.NewSGuid(sGuidType.SequentialAtEnd);
}
partial void OnUserIdChanging(Guid value)
{
//throw if its an edit...
throw new DbEntityValidationException("Cannot mutate primary key");
}
}
개체를 편집/업데이트 할 때 제대로 작동하지만 사실 처음에는 새 개체를 만들지 않습니다. 이 시점에서 새로운 엔티티 또는 기존 엔티티가 있는지 확인할 수있는 방법이 있습니까? 사전에
감사합니다, 피트
UPDATE :
내가 게시 한 후 일반적인 난 항상 답을 찾을 -_-! 당신의 답변을 주셔서 감사합니다, 나는 올바른 대안으로 올바른 대답으로 당신의 하나를 표시합니다. 이 속성 그리드 EF 디자이너, 디자이너 단지 속성을 선택하고 설정 적절한 액세스 한정자를 사용하는 경우
public class MyEntity
{
public int Id { get; private set; }
}
:
if (this.EntityState != System.Data.EntityState.Detached)
{
throw new DbEntityValidationException("Cannot mutate primary key");
}
글쎄, 당신은 키가있는 데이터베이스를 쿼리 할 수 있습니다. 만약 수정이 있었다면, 그렇지 않으면, 새로운 객체가 ... 아니면 내가 뭔가 잘못되었습니다. –
UserId setter를 비공개로 만듭니 까? –
나는 이것을 (개인적으로 설정하는 것) 생각한다. 그러나 그것을 업데이트 할 수있는 클래스 메소드를 생성하는 것을 막을 수는 없습니다. 그러나 나는 그들이 수표를 모두 제거하는 것을 막을 수는 없을 것이라고 생각합니다. onChanging 이벤트에서 방금 새 값을 가져오고 수동으로 설정하면 잘못된 레코드 등이 충돌 할 수 있습니다. 자동으로 코드 생성을 사용했기 때문에 비공개로 설정하지 않으려는 이유는 모델을 업데이트 할 때마다 파괴됩니다. < –