我正在试图弄清楚异常,并想知道如何生成Entity对象的id:
System.Data.Entity.DynamicProxies.TaskInstance_EFB25059687D16F3AB6ABF93C582495406916AC2CC28E7E312CB6B50EC3CF7A5.get_TaskLogs()
TaskInstance是这里的实体。每次发生异常时它都具有相同的标识符。只是想知道它是如何工作的。
答案 0 :(得分:0)
在EF关于代理类型生成的代码库中,有一种方法......
// <summary>
// Creates an SHA256 hash of a description of all the metadata relevant to the creation of a proxy type
// for this entity type.
// </summary>
private string BuildEntityTypeHash()
{
using (var sha256HashAlgorithm = MetadataHelper.CreateSHA256HashAlgorithm())
{
var hash = sha256HashAlgorithm.ComputeHash(Encoding.ASCII.GetBytes(BuildEntityTypeDescription()));
// convert num bytes to num hex digits
var builder = new StringBuilder(hash.Length * 2);
foreach (var bite in hash)
{
builder.Append(bite.ToString("X2", CultureInfo.InvariantCulture));
}
return builder.ToString();
}
}
...其中BuildEntityTypeDescription()
是一种从类型的导航属性,关键成员等构建字符串的方法。
因此,基本上,代理类型名称是类型元数据的散列表示,因此只要类型不变,它就始终是相同的字符串。