更改以字符串形式存储在MongoDB中文档中的枚举值 - c#

我有一个类,里面有一个枚举属性。保存整个文档时,由于以下文档的.NET表示形式中的属性,该属性以字符串形式写入数据库。

public enum Status { Good, Bad }

public class Document
{
    [BsonRepresentation(BsonType.String)]
    public Status Status { get; set; }
    // ...
}

稍后,当我想在不保存整个文档的情况下更新文档中的值时,我将构造一个过滤器,如下所示:

var builder = Builders<T>.Update;
var filter = builder.Set(new StringFieldDefinition<T, Status>(fieldName), (Status)value);
var result = await Context.Collection.UpdateManyAsync(filter, update);

不幸的是,这写了枚举的整数值。

如果我将过滤器更改为此

var filter = builder.Set(new StringFieldDefinition<T, Status>(fieldName), value.ToString());

驱动程序将抛出InvalidCastException。如何正确构造过滤器?还有另一种直接设置枚举值而不替换文档的方法吗?

我想到可能有一种方法可以将单字段行为与整个文档中的属性相关联,但是我似乎找不到解决方法。

参考方案

C#枚举由整数表示。默认情况下,第一个枚举为0,第二个枚举为1,依此类推。您可以为枚举条目分配特定的整数值,但它们又被解释为整数,而不是字符串。要获取与您的枚举条目匹配的字符串值,必须使用enum.parse方法。

我目前没有C#环境,因此我无法测试我的建议,但请尝试一下...

var filter = builder.Set(new StringFieldDefinition<T, String>(fieldName), Enum.Parse(typeof(Status), value));

在ASP.NET MVC中创建数据库回调的最有效方法 - c#

我有一个ASP.NET MVC网页,该网页基本上通过日期过滤器显示MS SQL数据库中表的行。当新行插入数据库表时,我想用新行列表更新网页视图。实现此目标的最有效方法是什么?基本上,我想从我的JavaScript创建一个到数据库服务器的回调,以用新结果更新UI。假设数据库表中的行数很大。(〜1百万)谢谢,cas 参考方案 如果数据库更新非常频繁,则可以按特定…

如何使用JavaScript访问嵌入式ASP.NET GlobalResources? - javascript

我正在开发一个遗留的ASP.NET项目,该项目正试图缓慢地进行调整,但是如果没有像巧克力手指屋一样塌陷的情况,我将无法进行重大更改。我试图为此找到解决方案,但由于术语的特定混合(“ javascript”,“ embedded”和/或“ resource”只是为我提供了有关如何嵌入.js文件的信息,而失败了)。 。),这可能是一种怪异的处理方式。该项目将Ap…

如何使用ASP.NET ViewState使用JavaScript - c#

我的页面中有UL,它为空。我开始使用JavaScript使用LI填充它。在回发阶段如何在asp.net中使用此新添加的动态数据?那是因为我的提交按钮是asp.net控件。我不想使用JS POST。谢谢 参考方案 我过去通过在隐藏字段中填充要发布的动态数据来完成此类操作,您可以-在回传之前触发JavaScript事件,该事件将数据从UL解析到隐藏字段中要么更新…

如何从.Net DLL获取公共出口列表? - c#

我可以使用“ dumpbin”和“ dll export”之类的工具来查看标准win32 DLL的公共入口点(“ exports”),例如Windows \ SYSTEM32 \ GDI32.dll。但是,当我在.Net DLL上使用这些相同的工具时,我看到的仅仅是 2000 .reloc 2000 .rsrc 48000 .text 我有一个C#/。Net…

VB.NET C#语法的泛型 - c#

您能否告诉我此VB.NET代码的C#等效项:Public Partial Class Index Inherits System.Web.Mvc.Viewpage(Of List(Of Task)) End Class 我不确定在哪里/如何在C#中添加它:public partial class DirList : System.Web.Mvc.ViewPa…