mongodbc# 드라이버와 함께 POCO를 사용할 때 _id 필드를 관리하는 방법
POCO로 mongo 데이터를 읽고 쓰는 경우
public class Thingy
{
public string Foo {get;set;}
}
...
coll.Insert(new Thing(Foo = "hello"));
다시 읽어보면 _id가 예기치 않은 속성이라는 오류가 나타납니다.그래서 _id라는 필드를 클래스에 추가했습니다.이제 _id 필드가 null일 수 없다는 내용의 삽입이 작동하지 않습니다.A는 BsonIgnoreIfNull 속성을 시도했지만 작동하지 않았습니다.
개체를 삽입할 때 개체에 다음이 없는 경우_id
그러면 드라이버가 필드를 추가하고 12바이트 MongoDB ObjectId 값으로 설정합니다.
다음을 추가하면 됩니다.Id
당신의 POCO에 대한 재산, 그것은 역직렬화될 것이다._id
:
public class Thingy
{
public ObjectId Id { get; set; }
}
또는 매핑할 다른 속성을 위임하려는 경우_id
그러면 당신은 그것을 그것으로 장식할 수 있습니다.BsonIdAttribute
다음과 같이:
[BsonId]
public ObjectId MyKey { get; set; }
그_id
필드가 MongoDB일 필요는 없습니다.ObjectId
데이터 유형(어레이 제외)의 모든 값으로 설정할 수 있으며 컬렉션 내에서 고유해야 합니다.
id에 대한 속성(또는 필드)을 추가하고 사용할 id 생성기를 serializer에 지정해야 합니다.
[BsonId(IdGenerator = typeof(ObjectIdGenerator))]
public object ThingyId { get; set; }
MongoDb Driver에는 3개가 있으며 직접 작성할 수도 있습니다.더 많은 정보는 http://www.mongodb.org/display/DOCS/CSharp+Driver+Serialization+Tutorial#CSharpDriverSerializationTutorial-WriteacustomIdgenerator 에서 확인할 수 있습니다.
나는 일반적으로 Thingy를 포장을 합니다.
public class MongoThingy
{
public ObjectId Id { get; set; }
public Thingy Thingy { get; set; }
}
그것은 그것을 훨씬 쉽게 만듭니다, 종종 Thingy 클래스는 제가 통제할 수 없는 다른 도서관에서 옵니다.또한 처리를 위해 다른 사람에게 넘겨주기 위해 역직렬화하는 것이 더 쉽습니다.
다음과 같이 속성을 추가합니다.
public BsonObjectId Id { get; set; }
MongoDB 드라이버가 자동으로 변환합니다.Id
로._id
serialization\deserialization 중.
public class Thingy
{
public ObjectId Id { get; set; }
public string Foo { get; set; }
}
학급에 따라
필요한 경우 다음 코드를 사용합니다.
var collection = database.GetCollection<Thingy>("db_Thingy");
Thingy tg= new Thingy();
tg.Foo = "Hello";
collection.insert(tg);
https://learn.microsoft.com/pt-br/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-5.0&tabs=visual-studio 로 가는 길.
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace BooksApi.Models
{
public class Book
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
[BsonElement("Name")]
public string BookName { get; set; }
(...)
}
}
위의 댓글에서 Chris Christopher가 제안한 것처럼, 당신은 다음을 사용할 수 있습니다.BsonIgnoreExtraElements
클래스 속성:
[BsonIgnoreExtraElements]
public class Thingy
{
public string Foo { get; set; }
}
이렇게 하면 다른 사용자와 ID 속성을 추가할 필요가 없습니다.BSon
기여하다.
언급URL : https://stackoverflow.com/questions/6063219/how-to-manage-id-field-when-using-poco-with-mongodb-c-sharp-driver
'programing' 카테고리의 다른 글
오라클에서 아토믹 MERGE를 수행할 수 있습니까? (0) | 2023.06.29 |
---|---|
Spring Boot에서 특정 패턴 대신 모든 요청 매핑 (0) | 2023.06.29 |
64비트에서 32비트 부호 없는 곱셈이 정의되지 않은 동작을 유발합니까? (0) | 2023.06.29 |
@동적 속성이 있는 TestPropertySource (0) | 2023.06.29 |
AES 암호화 데이터를 통한 Mysql/MariaDB 검색 (0) | 2023.06.29 |