2014-02-28 64 views

回答

2

的EF源代碼可用(http://entityframework.codeplex.com/),這樣我們就可以直接來看看,沒必要依靠某種形式的反編譯的。

一種正則表達式搜索顯示了這個:

// Replace anything that doesn't adhere to the ECMA specification for identifiers with an underscore, 
// unless it's the first which the schema definition says must be a letter... 
// System.Data.Resource.CSMSL_2.xsd - [\p{L}\p{Nl}][\p{L}\p{Nl}\p{Nd}\p{Mn}\p{Mc}\p{Pc}\p{Cf}]{0,} 
src/EFTools/EntityDesignModel/ModelHelper.cs

尋找該模式文件:無法找到,但將其更改爲System.Data.Resources.CSMSL_2.xsd顯示了三個文件:一個在setup,一個在test,我會認爲是第三份:src/EntityFramework/Resources/System/Data/MappingSpecification/System.Data.Resources.CSMSL_2.xsd

這確實使用相同的正則表達式作爲對TSimpleIdentifier類型的約束。

因此,要回答你的問題:

Why is this limitation added? It feels rather arbitrary to me.

因爲這是對底層EF型號的限制規定。瞭解爲什麼您需要在開始時詢問設計EF的人員。

是的,這是任意。但是,所有的標識符命名規則都是任意的。例如。

  • 有些事情讓一個連字符,而不是在名稱中使用下劃線,但這些不能被直接映射到.NET標識符
  • C#和F#允許.NET CLR標識符的不同子集(F#標識符可以包含空格!)
  • 這就是C#中的匿名類型在運行時可以有名稱,但不能在源代碼中命名的原因:出現在編譯器生成名稱中的<>字符對於CLR的運行時是沒問題的。
相關問題