2016-07-29 63 views
1

上下文如何將早期綁定的屬性名稱作爲字符串常量?

我正在使用crmsvcutil來生成早期綁定實體。我還利用實體名稱的字符串,例如常量MyEntity.EntityLogicalName在聲明如下內容(使用備用鑰匙):

var reference = new EntityReference(MyEntity.EntityLogicalName, "my_attribute_name", myValue) 

問題

我想消除「my_attribute_name」字符串字面聲明。我怎樣才能做到這一點?

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

錯過我的東西?如果沒有,可能是crmsvcutil的擴展(類似於選項集生成器同義詞?)

+0

對於主鍵我使用entityInstance.ToEntityReference(),但沒有任何重載替代鍵afaik ....也許值得添加一個自定義的擴展方法? – Jordi

回答

1

要回答這個問題,可以使用C#6 nameof()表達式來獲取屬性的名稱。如果將名稱轉換爲lower情況下,你最終的邏輯名稱:

var logicalName = nameof(MyEntity.MyAttributeValue).ToLower(); 

有了這樣說,我很少發現自己不得不做這樣的事情通常你可以使用Entity.ToEntityReference()一個更強類型的方法

此外。您僅用於EntityReference的構造函數對於備用密鑰(否則一個會使用constructor,需要stringGuid

+0

謝謝,聽起來很酷。然而,安全權限適用(客戶關係管理在線,沙箱插件),所以我的問題是:涉及到反射,或者這是編譯時的事情? –

+1

是的,nameof在編譯時被評估。因此,在沙盒插件中使用它應該沒有問題(但我仍建議您考慮替代解決方案是否與您相關) –

+0

非常感謝。雖然我沒有強調:我有理由使用備用密鑰,而且,將屬性名稱作爲字符串也是解決其他情況的任務(因爲原始問題標題中提到),所以備用密鑰僅僅是示例上下文,而不是問題本身解決。 –

相關問題