我已经在我的泛型存储库中创建了一个泛型ObjectSet<T>。
我想要的是ObjectSet<T>的EntityKey的name,这样我就可以在DataContext.GetObjectByKey中使用它了。
我到处搜索,深入挖掘,但似乎在ObjectSet类中找不到这个值。
发布于 2010-07-25 15:55:57
我前段时间寻找了一种很好的方法来做这件事,但没有找到。我通常最终会在某个地方构建一个GetEntityByKey扩展方法,并在其中连接字符串来为TryGetObjectByKey调用构建实体键。构建实体键的一般思想是这样的:
internal class Program
{
private static void Main(string[] args)
{
var dc = new AdventureWorksLT2008Entities();
object c;
dc.TryGetObjectByKey(GetEntityKey(dc.Customers, 23), out c);
var customer = c as Customer;
Console.WriteLine(customer.EmailAddress);
}
private static EntityKey GetEntityKey<T>(ObjectSet<T> objectSet, object keyValue) where T : class
{
var entitySetName = objectSet.Context.DefaultContainerName + "." + objectSet.EntitySet.Name;
var keyPropertyName = objectSet.EntitySet.ElementType.KeyMembers[0].ToString();
var entityKey = new EntityKey(entitySetName, new[] {new EntityKeyMember(keyPropertyName, keyValue)});
return entityKey;
}
}你也许能够做一些类似的事情。为了简单起见,本例假设每个EntityKey都有一个字段--对于多个值键,您需要对ObjectSet<T>.ElementType.KeyMembers执行稍微复杂一点的操作,并将所有键传递给EntityKey构造函数。
发布于 2010-12-10 11:08:30
通用:
public class GenericoRepositorio<T> : IGenericoRepositorio<T> where T : class
{
protected readonly ObjectSet<T> ObjetoSet;
protected readonly ModeloContainer Contexto;
public GenericoRepositorio(ModeloContainer contexto)
{
Contexto = contexto;
ObjetoSet = Contexto.CreateObjectSet<T>();
}
public T Carregar(int id)
{
object objeto;
Contexto.TryGetObjectByKey(GetEntityKey(ObjetoSet, id), out objeto);
return (T)objeto;
}
private static EntityKey GetEntityKey<T>(ObjectSet<T> objectSet, object keyValue) where T : class
{
var entitySetName = objectSet.Context.DefaultContainerName + "." + objectSet.EntitySet.Name;
var keyPropertyName = objectSet.EntitySet.ElementType.KeyMembers[0].ToString();
var entityKey = new EntityKey(entitySetName, new[] { new EntityKeyMember(keyPropertyName, keyValue) });
return entityKey;
}
}发布于 2010-07-25 22:29:41
请参阅我制作的关于获取EntitySetName的this post。对于我的存储库,我创建了一个属性,该属性获取特定类名的实体集名称,以执行您正在尝试执行的操作。
https://stackoverflow.com/questions/3328325
复制相似问题