加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:33:33 所属栏目:百科 来源:网络整理
导读:我已经创建了一个通用的ObjectSet T在我的通用存储库中. 我想得到的是ObjectSet的EntityKey的名称 T这样我就可以在DataContext.GetObjectByKey中使用它. 我已经四处搜索并深入挖掘,但我似乎无法在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构造函数中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读