c#-无法使用接口确定i => i.Id的序列化信息
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-无法使用接口确定i => i.Id的序列化信息,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2179字,纯文字阅读大概需要4分钟。
内容图文
首先,我知道已经有关于此错误消息的问题了,但是我还没有发现任何与在这种类型的查询中使用接口有关的问题.
我目前正在尝试使用C#驱动程序2.0更新MongoDB实体.但是,在尝试构建查询时出现错误(我假设它是代码的Builders< T> .Filter.Eq(i => i.Id,Entity.Id)位),并且我m收到以下错误:
Unable to determine the serialization information for i => i.Id.
我正在尝试更新以下课??程
public interface IEntity {
string Id { get; set; }
}
public interface ITrack : IEntity {
string Name { get; set; }
}
public class TrackDTO : ITrack
{
[BsonId]
public string Id { get; set; }
public string Name { get; set; }
}
然后,我使用接口在通用DAO类中使用以下方法将对象保存到数据库中,以替换整个文档.注意,在下面的示例中,T被编码为ITrack(即TrackDao = new Dao< ITrack>),但是当对象在运行时传递时,它是TrackDTO对象(正确):
public async Task<T> Save(T entity)
{
// Save the entity to the collection.
ReplaceOneResult result = await _collection.ReplaceOneAsync(Builders<T>.Filter.Eq(i => i.Id, entity.Id), entity, new UpdateOptions() { IsUpsert = true });
// return the saved user object.
return entity;
}
我不知道IEntity类的Id属性是否也需要[BsonId]属性,但我想尽可能避免这种情况,因为我想让我的模型层(IEntity所在的地方)不受任何数据库平台的影响具体参考.
我也尝试添加以下没有作用的类映射:
BsonClassMap.RegisterClassMap<TrackDTO>(cm =>
{
cm.AutoMap();
cm.MapMember(c => c.Id).SetSerializer(new StringSerializer(BsonType.ObjectId));
cm.SetIdMember(cm.GetMemberMap(c => c.Id));
});
出于与在模型层中没有[BsonId]属性相同的原因,我不想用引用DTO对象的[BsonKnownTypes]装饰Model类,但是我不介意这是否需要作为一部分出现类地图.
解决方法:
>对于
“Unable to determine the serialization information for i => i.Id.”
尝试使用:nameof().
Builders<T>.Filter.Eq(nameof(IEntity.Id), entity.Id)
2.
…but I’d like to avoid this if possible, as I want to keep my model
layer (where IEntity resides) free of any database platform specific
references.
我针对您和类似问题的解决方案:
public interface IEntity {
[BsonId]
string Id { get; set; }
string IdEntity { get; set; }
}
[BsonIgnoreExtraElements(Inherited = true)]
public abstract class BaseEntity : IEntity
{
[BsonRepresentation(BsonType.ObjectId)]
public virtual string Id { get; set; }
[BsonIgnoreIfNull]
public string IdEntity { get; set; }
}
内容总结
以上是互联网集市为您收集整理的c#-无法使用接口确定i => i.Id的序列化信息全部内容,希望文章能够帮你解决c#-无法使用接口确定i => i.Id的序列化信息所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。