C# 如何将早期绑定的属性名称作为字符串常量?

C# 如何将早期绑定的属性名称作为字符串常量?,c#,dynamics-crm,C#,Dynamics Crm,上下文 我正在使用crmsvcutil生成早期绑定实体。我还使用实体名称字符串常量MyEntity.EntityLogicalName,例如在以下语句中(使用备用键): 问题 我想删除语句中的“my_attribute_name”字符串文字。我该怎么做 不幸的是,我在生成的C#模型中找不到它 我错过了什么?如果没有,则可能存在对crmsvcutil的扩展(类似于optionset生成器sameple?要回答此问题,可以使用C#6nameof()表达式获取属性名称。如果将名称转换为小写,则最终得到

上下文

我正在使用crmsvcutil生成早期绑定实体。我还使用实体名称字符串常量
MyEntity.EntityLogicalName
,例如在以下语句中(使用备用键):

问题

我想删除语句中的“my_attribute_name”字符串文字。我该怎么做

不幸的是,我在生成的C#模型中找不到它


我错过了什么?如果没有,则可能存在对crmsvcutil的扩展(类似于optionset生成器sameple?

要回答此问题,可以使用C#6
nameof()
表达式获取属性名称。如果将名称转换为小写,则最终得到逻辑名称:

var logicalName = nameof(MyEntity.MyAttributeValue).ToLower();
话虽如此,我发现自己很少需要做这样的事情。通常你可以使用一种更强类型的方法


此外,您用于
EntityReference
的构造函数仅用于备用键(否则将只使用接受
字符串和
Guid的构造函数)

用于我使用entityInstance.ToEntityReference()的主键,但afaik的备用密钥没有任何重载…也许值得为此添加一个自定义扩展方法?谢谢,听起来很酷。但是安全权限适用(CRM online,沙盒插件)所以我的问题是:是否涉及到反射,或者这是编译时的事情吗?是的,在编译时对NAMEOF进行评估。因此,在沙箱插件中使用它是没有问题的(但我仍然建议您考虑其他解决方案是否与您相关)。非常感谢。虽然我没有强调:我有理由使用备用键,而且,在其他情况下,将属性名称作为字符串也是要解决的任务(正如原始问题标题所说),所以备用键只是一个示例上下文,而不是要解决的问题本身。
var logicalName = nameof(MyEntity.MyAttributeValue).ToLower();