programing

MongoDBC# 드라이버:삽입 시 속성 무시

kakaobank 2023. 5. 7. 11:47
반응형

MongoDBC# 드라이버:삽입 시 속성 무시

저는 공식 MongoDBC # Drive v0.9.1.26831을 사용하고 있는데, POCO 클래스가 주어지면 특정 속성이 삽입되지 않도록 무시할 수 있는 방법이 있는지 궁금합니다.

예를 들어, 저는 다음과 같은 수업을 듣습니다.

public class GroceryList
{
    public string Name { get; set; }
    public FacebookList Owner { get; set; }
    public bool IsOwner { get; set; }
}

식료품 목록 개체를 삽입할 때 IsOwner가 삽입되지 않는 방법이 있습니까?기본적으로 나는 데이터베이스에서 개체를 가져온 다음 애플리케이션 계층에서 IsOwner 속성을 설정한 다음 개체를 뷰 모델에 매핑하는 컨트롤러로 되돌립니다.

내 질문이 이해되기를 바랍니다.감사합니다!

[BsonIgnore] 특성이 작업을 수행한 것 같습니다.

public class GroceryList : MongoEntity<ObjectId>
{
    public FacebookList Owner { get; set; }
    [BsonIgnore]
    public bool IsOwner { get; set; }
}

또는 어떤 이유로 속성을 사용하지 않으려는 경우(예: 추가 종속성을 가져오는 것을 원하지 않는 경우)MongoDB.BsonDTO)에서 다음 작업을 수행할 수 있습니다.

BsonClassMap.RegisterClassMap<GroceryList>(cm =>
{
  cm.AutoMap();
  cm.UnmapMember(m => m.IsOwner);
});

또한 당신은 만들 수 있습니다.IsOwnernull 및 추가 가능[BsonIgnoreExtraElements]반 전체에게:

[BsonIgnoreExtraElements]
public class GroceryList : MongoEntity<ObjectId>
{
    public FacebookList Owner { get; set; }
    public bool? IsOwner { get; set; }
}

다음이 포함된 숙박업소null직렬화하는 동안 값이 무시됩니다.하지만 내 생각엔…[BsonIgnore]당신의 경우에 더 좋을 것입니다.

BsonIgnoreExtraElements와 BsonIgnore의 두 속성을 결합하는 것이 좋습니다.그 이유는 BsonIgnore가 DB에 "IsOwner" 속성을 삽입하지 않지만 DB에 이 필드가 포함된 "이전" 인스턴스가 있고 피쳐의 모델에서 이 필드를 제거하거나 "GroceryList" 클래스를 확장하고 DB에서 새 클래스를 사용하는 경우 다음 예외가 발생하기 때문입니다.

"'IsOwner' 요소가 클래스의 어떤 필드나 속성과도 일치하지 않습니다."

모델 클래스를 편집하는 대신 "클래스등록"과 "추가 요소 설정 무시" "구성원 매핑 해제"를 함께 사용하는 방법도 있습니다.

드라이버를 초기화할 때 이 코드를 추가하면 됩니다.

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

Mongo 클래스 매핑에 대한 자세한 내용은 다음에서 확인할 수 있습니다.

http://mongodb.github.io/mongo-csharp-driver/2.0/reference/bson/mapping/

누군가 다른 방법에 관심이 있을지도 모르니까요.규약을 통해:

public class IgnoreSomePropertyConvention : ConventionBase, IMemberMapConvention
{
    public void Apply(BsonMemberMap memberMap)
    { // more checks will go here for the case above, e.g. type check
        if (memberMap.MemberName != "DoNotWantToSaveThis")
            memberMap.SetShouldSerializeMethod(o => false);
    }
}

그런 다음 앱을 시작하는 동안 이 규약을 한 번 등록해야 합니다.

ConventionRegistry.Register("MyConventions", new ConventionPack { new IgnoreBaseIdConvention()  }, t => true);

언급URL : https://stackoverflow.com/questions/4892816/mongodb-c-sharp-driver-ignore-property-on-insert

반응형