我有x个表,所有表都有uniqueidentifier / guid主键。我想写一个泛型函数,它将采用Guid param id,其中T是EntityObject,就像这样......
public T SelectById<T>(Guid id) where T : EntityObject
这似乎是一件简单的事情。我已经在互联网上搜索,但是找不到办法,更不用说优雅了。我在这里错过了什么,为什么这很难?
答案 0 :(得分:3)
为了实现这一点,您需要确保您的实体上的ID属性符合命名约定,例如Id或EntityName_Id。然后你要做的就是使用一点反射来构建EntityKey。
ObjectStateEntry entry;
var entityKey = new EntityKey(Context.DefaultContainerName + "." + typeof(T).Name, "Id", id);
object entity = null;
if (!Context.ObjectStateManager.TryGetObjectStateEntry(entityKey, out entry) || entry.Entity == null)
{
try
{
entity = Context.GetObjectByKey(entityKey);
}
catch (ObjectNotFoundException)
{
}
}
return (T)entity;