我创建了以下结构:
public interface IRecord
{
string Name { get; set; }
}
public class Record : IRecord
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set;}
public string Name { get; set; }
public string Test { get; set; }
}
然后为所有IRecord实体和要插入的方法创建存储库:
public void Insert(IRecord record)
{
records = database.GetCollection<IRecords>("Records");
records.InsertOne(record);
}
注意:代码已简化
插入记录时,我可以看到_id字段为空。
不允许修改基类或接口。
问题1 :mongo是否仅针对具体类型生成_id?
因此在我的项目中将有很多不同类型的记录。实际上,我将无法将其强制转换为具体对象,因此我将获得JObjects,但我想保证插入时一些基本字段集将在那里存在100%。
基本上是这样的:
public void SomeAction()
{
IRecord record = new Record();
//populate basic record fields
var jObject = JObject.FromObject(record);
if(true) //condition here
{
jObject.Add("newFieldName", new JObject("newFieldValue"));
}
recordRepo.Insert(jObject);
}
问题2 ,在这种情况下,如何控制_id字段?