programing

mongodbc# 드라이버와 함께 POCO를 사용할 때 _id 필드를 관리하는 방법

javamemo 2023. 6. 29. 19:40
반응형

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로._idserialization\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

반응형