c# – 如何获取ObjectSet的实体密钥名称?

我已经创建了一个通用的ObjectSet< T>在我的通用存储库中.

我想得到的是ObjectSet的EntityKey的名称< T>这样我就可以在DataContext.GetobjectByKey中使用它.

我已经四处搜索并深入挖掘,但我似乎无法在ObjectSet类中的任何位置找到此值.

解决方法

我刚才看到了一个很好的方法来做到这一点并没有找到一个.我通常最终在某处和其中构建一个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构造函数中.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...