gpt4 book ai didi

c# - 如何在动态 Odata 对象上设置枚举值

转载 作者:行者123 更新时间:2023-11-30 12:23:20 24 4
gpt4 key购买 nike

我有一个 ODATA 服务返回一个与此类似的动态对象:https://blogs.msdn.microsoft.com/leohu/2013/11/04/typeless-entity-object-support-in-webapi/

当我填充对象属性时,我会:

 var entityCategory = new EdmEntityObject(entityType);
bool bSuccess = entityCategory.TrySetPropertyValue("Name", "Category 1");

这工作正常,但我无法设置我的任何枚举属性的值。这是我尝试过的:

var edmValue= new EdmEnumValue( new EdmEnumTypeReference( enumType, true ), value );
bool bSuccess = entityCategory.TrySetProperty( "Status", edmValue );

但这不起作用,我只是在响应中得到 null。 bSuccesstrue,如果我随后调用 TryGetValue,它甚至具有预期值。

但是,在网页响应状态仍然显示为NULL。

我尝试了很多变体,但似乎没有任何效果。

知道我做错了什么吗?

找到解决方案

这是最终对我有用的东西:

var oEnumObject = new EdmEnumObject( enumType, strEnumValue );
entity.TrySetPropertyValue( fieldName, oEnumObject );

不确定为什么我需要使用 EdmEnumObject,但它似乎可以工作。它实际上会接受并显示 strEnumValue 的任何字符串值。

这些都行不通

更多信息:

当我向数据模型添加一个枚举时,我会执行如下操作:

var enumType = new EdmEnumType( Namespace, "Status", EdmPrimitiveTypeKind.Int64, false);
enumType.AddMember( "Active", 0);
..
AddProperty( EdmStructuralProperty( this, field.Name, new EdmEnumTypeReference( thisEnum, bIsNullable ) )

我在这里缓存了 enumType 的值,并在稍后填充时使用它(在上面的代码中)。因此,我认为 enumType 是有效的。至于 value,我有一些代码可以选择正确的 EdmEnumMember,但我也只是尝试将它硬编码到列表中的第一个,但结果仍然是:

var edmValue = new EdmEnumValue( new EdmEnumTypeReference( enumType, true ), enumType.Members.First() );

那到底是怎么回事?我在那里遇到了一个断点,它似乎具有正确的值,但我在响应中得到了 null。我也试过这个:

var value = new ODataEnumValue( nEnumIntValue.ToString(), enumType.FullName() );
entity.TrySetPropertyValue( col.ColumnName, value );

同样,NULL。非常感谢任何帮助!

最佳答案

引用 following test on github敌人 EdmEnumType

您应该看看您是如何创建成员并将成员添加到 enumType...

//make sure you enum type is not nullable
var enumType = new EdmEnumType(Namespace, "Status", EdmCoreModel.Instance.GetInt32(false).PrimitiveDefinition(), false);

//enum members are made up of constants
var enumMember = enumType.AddMember("Active", new EdmIntegerConstant(0));

//You should also not make the value nullable
var edmValue = new EdmEnumValue(new EdmEnumTypeReference(enumType, false), enumMember);

关于c# - 如何在动态 Odata 对象上设置枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37327309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com