gpt4 book ai didi

c# - 如何在 EntityKey 上编写通用主键查找器?

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:19 24 4
gpt4 key购买 nike

我认为下面的代码非常有用。但我尝试创建 EntityKEy。我用过:

 EntityKey key = new EntityKey(entitySetKEYName, "XTableId", id);

但我不想用这个。我的表 PRIMARYID YtableId、ZTableId 等...我该如何写:
 EntityKey key = new EntityKey(entitySetKEYName, Find().PrimaryKEY, id);

       public T GetByPrimaryKey<T>(int id)
{
string entitySetName = _context.MetadataWorkspace.GetEntityContainer(_context.DefaultContainerName, DataSpace.CSpace).BaseEntitySets.
Where(q => q.ElementType.Name == typeof(T).Name).FirstOrDefault().Name;
string entitySetKEYName = string.Format("{0}.{1}", _context.DefaultContainerName, entitySetName);
EntityKey key = new EntityKey(entitySetKEYName, "XTableId", id);

return (T)_context.GetObjectByKey(key);
}

如何自动检测主键????????????????

最佳答案

首先,PK 不一定是 Int32,它可以是 Guid 甚至是多属性复杂键,所以泛型方法除了 Object 之外应该是 PK...这是我的非常丑陋的变体,但它完成了工作,尽管它需要适当的测试。

    static void Main(string[] args)
{
var entity = GetEntityByKey<Entity>(Guid.Empty);
}
private static T GetEntityByKey<T>(object key) where T : class
{
using (var context = new ObjectContext("Name=ModelContainer"))
{
var set = context.CreateObjectSet<T>().EntitySet;
var pk = set.ElementType.KeyMembers[0]; // careful here maybe count can be o or more then 0
EntityKey entityKey = new EntityKey(set.EntityContainer.Name+"."+set.Name, pk.Name, key);
return (T)context.GetObjectByKey(entityKey);
}
}

关于c# - 如何在 EntityKey 上编写通用主键查找器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4427816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com