首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取ObjectSet<T>的实体键名?

如何获取ObjectSet<T>的实体键名?
EN

Stack Overflow用户
提问于 2010-07-25 14:44:33
回答 7查看 12.1K关注 0票数 6

我已经在我的泛型存储库中创建了一个泛型ObjectSet<T>

我想要的是ObjectSet<T>的EntityKey的name,这样我就可以在DataContext.GetObjectByKey中使用它了。

我到处搜索,深入挖掘,但似乎在ObjectSet类中找不到这个值。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-07-25 15:55:57

我前段时间寻找了一种很好的方法来做这件事,但没有找到。我通常最终会在某个地方构建一个GetEntityByKey扩展方法,并在其中连接字符串来为TryGetObjectByKey调用构建实体键。构建实体键的一般思想是这样的:

代码语言:javascript
复制
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构造函数。

票数 6
EN

Stack Overflow用户

发布于 2010-12-10 11:08:30

通用:

代码语言:javascript
复制
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;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-07-25 22:29:41

请参阅我制作的关于获取EntitySetName的this post。对于我的存储库,我创建了一个属性,该属性获取特定类名的实体集名称,以执行您正在尝试执行的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3328325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档