2011-06-29 17 views
8

Gömülü bir dizi belge içeren bir mongo belgesine sahibim. Gömülü belgelerin "Id" adlı bir özelliği vardır. mongo C# sürücüsüyle katıştırılmış dokümanda Id özelliği adı korunur

{ Name: "Outer object", Embedded: [ {Name: "Embedded A", Id: "5f1c591a71dc237199eeaeda"} ] } 

Benim C# haritalama nesneleri

(Açıkçası basitleştirilmesi,) böyle bir şey ben veritabanına bir dış yazarken

public class Outer 
{ 
    public string Name { get; set; } 
    public IEnumerable<Inner> Inners { get; set; } 
} 

public class Inner 
{ 
    public string Name { get; set; } 
    public string Id { get; set; } 
} 

, C# sürücüsü için Inner.Id özelliğin adını değiştirir bakmak _İD. Bu otomatik yeniden adlandırmayı nasıl engellerim? Id özelliğinde [BsonElement ("Id")] özelliğini kullanmayı denedim, ancak yardımcı olmadı.

cevap

11

MongoDB dokümantasyon explicitly states: MongoDB içinde

Belgeler bunları özel olarak tanımlayan bir anahtar, _id, sahip olmaları gerekmektedir. Öte yandan

, C# özellikleri genellikle pascal-harf ve sürücü tasarımcıları böylece önekleri kullanmayan apparently decided kuvvet haritalama için Id mülkiyet _id veritabanı özellik. Sadece MongoDB yılında Id adı olur bir sivil _id niteliğini bağlamak istiyorsanız

, sen Id dışında bir adla başka C# mal beyanında böylece sürücü onunla müdahale etmeyen:

public class Inner 
{ 
    public string Name { get; set; } 

    [BsonElement("Id")] 
    public string IdStr { get; set; } 
} 
+0

Bu sadece benim tahminim. MongoDB'yi hiç kullanmadım. –

+1

Mülkün adını IdStr olarak değiştirdim ve mülke [BsonElement ("Id")] özniteliğini ekledim. İşe yaradı. Teşekkürler! –

+0

Bu cevap için teşekkürler. Bugün kovaladığımız bir sorunu açıklıyor. Haritayı nasıl geçersiz kılıyor olursanız olun. Ne pahasına olursa olsun. : / –

1

Yeni yorum yazacağım. Notlarım insanlar için bir zaman dilimi kurtaracak. Eğer "Kimliği" özelliğini değiştirmek için izin verilmez ise

[BsonId] 
[BsonRepresentation(BsonType.ObjectId)] 
[BsonElement("Id")] 
public string Subject { get; set; } 
0
Dan'in yanıta katılabilir

, ancak bazı durumlarda: MongoDB daki _ID NesneKimliği tip C# sonra ise bazı daha fazla özellik eklemek gerekir Başka bir şeye, aşağıdaki gibi sınıf haritalarındaki davranışları açıkça değiştirebilirsiniz.

  BsonClassMap.RegisterClassMap<Inner>(cm => 
      { 
       cm.AutoMap(); 
       cm.UnmapProperty(c => c.Id); 
       cm.MapMember(c => c.Id) 
        .SetElementName() 
        .SetOrder(0) //specific to your needs 
        .SetIsRequired(true); // again specific to your needs 
      });