2017-08-17 81 views
-1

我得到了一个.net核心应用程序,它非常简单直接,它使用REST向mongo数据库添加和下载对象。添加项目的效果非常好。获取包含所有项目的列表,但是当我尝试使用id访问某个列表时,则每次获得null我应该做些什么来使这段代码有效。它意味着当数据库中有一个匹配时,使用它的唯一ID从数据库中获取一个Tool对象。获取LUUID的文档

下面是数据库中的对象 database view 这里是我的仓库类

private IMongoCollection<Tool> Tools => _database.GetCollection<Tool>("Tools"); 

    public async Task<Tool> GetAsync(Guid id) => 
      await Tools.AsQueryable().FirstOrDefaultAsync(tool => tool.Id == id); 

参数看起来像,当我检查出来的调试器"{ee1aa9fa-5d17-464c-a8ba-f685203b911f}"

编辑

工具类属性

public Guid Id { get; protected set; } 

public string Model { get; protected set; } 

public string Brand { get; protected set; } 

public string Type { get; protected set; } 

public uint Box { get; protected set; } 

固定检查评论

Project on github

+0

请告诉我问题? – Liam

+0

我虽然说明了自己,但是加了 – karoluS

+0

不行,还是不知道你的要求是什么? – Liam

回答

1

在C#中的MongoDB驱动程序要做到这一点,最简单的方法是设置一个全球性的GuidRepresentation设置可以发现在BsonDefaults对象上。这是一个全局设置,并且会影响到Bson二进制对象中的所有GUID的序列化/反序列化。

BsonDefaults.GuidRepresentation = GuidRepresentation.PythonLegacy; 

var collection = new MongoClient().GetDatabase("test").GetCollection<ClassA>("test"); 

var item = collection.Find(x => x.MyId == new Guid("ee1aa9fa-5d17-464c-a8ba-f685203b911f")) 
.FirstOrDefault(); 

第二个选择是将GUID从LUUID手动转换为CSUUID,对于这种有的GuidConverter MongoDB的驱动器内的辅助类,与此将其转换到byte[]GUID其通常用于用于存储,但我们可以将其用于我们的查询。

BsonDefaults.GuidRepresentation = GuidRepresentation.CSharpLegacy; 

var collection = new MongoClient().GetDatabase("test").GetCollection<ClassA>("test"); 

var luuid = new Guid("0798f048-d8bb-7048-bb92-7518ea4272cb"); 
var bytes = GuidConverter.ToBytes(luuid, GuidRepresentation.PythonLegacy); 
var csuuid = new Guid(bytes); 

var item = collection.Find(x => x.MyId == csuuid) 
    .FirstOrDefault(); 

我还注意到,您使用的机器人T3(又名RoboMongo),这个应用程序中,你可以设置的GUID是如何去Options显示 - >Legacy UUID Encodings

RoboMongo

+0

我希望我可以upvote你。我尝试了两种解决方案,他们都在工作。很多人非常感谢您的好评! – karoluS