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
'programing' 카테고리의 다른 글
| Python의 문자열 기반 열거형 (0) | 2023.05.07 |
|---|---|
| C#에서 "수익률 깨짐;"은 무엇을 합니까? (0) | 2023.05.07 |
| 확장 메서드를 일반적이지 않은 정적 클래스에 정의해야 합니다. (0) | 2023.05.07 |
| MongoDB Shell에서 ISO 날짜에 일 추가/감산 (0) | 2023.05.07 |
| 열거형 변수의 기본값은 무엇입니까? (0) | 2023.05.07 |