programing

MongoDB C# 드라이버 - 바인딩 시 필드 무시

closeapi 2023. 3. 22. 21:13
반응형

MongoDB C# 드라이버 - 바인딩 시 필드 무시

MongoDB와 C#을 사용하여 FindOne()을 사용할 때 오브젝트에 없는 필드를 무시하는 방법이 있습니까?

EG, 예제 모형.

public class UserModel
{
    public ObjectId id { get; set; }
    public string Email { get; set; }
}

이제 MongoDB 컬렉션에도 비밀번호를 저장하지만 위의 오브젝트에는 바인드하지 않습니다.이렇게 Get Like를 하면

  var query = Query<UserModel>.EQ(e => e.Email, model.Email);
  var entity = usersCollection.FindOne(query);

다음과 같은 오류가 발생합니다.

Element 'Password' does not match any field or property of class 

Mongo에게 모델과 일치하지 않는 필드를 무시하라고 할 수 있는 방법이 있습니까?

네. 그냥 장식만 하세요.UserModel와의 클래스BsonIgnoreExtraElements속성:

[BsonIgnoreExtraElements]
public class UserModel
{
    public ObjectId id { get; set; }
    public string Email { get; set; }
}

이름에서 알 수 있듯이 드라이버는 예외를 발생시키는 대신 추가 필드를 무시합니다.자세한 내용은 여기를 참조하십시오. 추가 요소 무시.

그러나 다른 가능한 해결책은 이에 대한 규약을 등록하는 것입니다.

이렇게 하면 [BsonIgnoreExtraElements]로 모든 클래스에 주석을 달 필요가 없습니다.

mongo 클라이언트를 작성할 때 다음을 설정합니다.

        var pack = new ConventionPack();
        pack.Add(new IgnoreExtraElementsConvention(true));
        ConventionRegistry.Register("My Solution Conventions", pack, t => true);

네. 모델 클래스를 편집하는 대신RegisterClassMap와 함께SetIgnoreExtraElements.

이 경우는, 드라이버를 초기화할 때에 다음의 코드를 추가합니다.

BsonClassMap.RegisterClassMap<UserModel>(cm =>
{
     cm.AutoMap();
     cm.SetIgnoreExtraElements(true);
});

클래스 매핑을 사용하여 추가 요소를 무시하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다. - 추가 요소 무시

언급URL : https://stackoverflow.com/questions/23448634/mongodb-c-sharp-driver-ignore-fields-on-binding

반응형