C# 如何在EntityKey上编写通用主键查找器?
我认为下面的代码非常有用。但我尝试创建EntityKEy。我用过:C# 如何在EntityKey上编写通用主键查找器?,c#,visual-studio-2010,entity-framework,generics,repository-pattern,C#,Visual Studio 2010,Entity Framework,Generics,Repository Pattern,我认为下面的代码非常有用。但我尝试创建EntityKEy。我用过: 但是我不想用这个。我的表主要ID为YtableId、ZTableId等。。。我该如何写这封信: public T GetByPrimaryKey(int-id) { 字符串entitySetName=\u context.MetadataWorkspace.GetEntityContainer(\u context.DefaultContainerName,DataSpace.CSpace).BaseEntitySets。
但是我不想用这个。我的表主要ID为YtableId、ZTableId等。。。我该如何写这封信:
public T GetByPrimaryKey(int-id)
{
字符串entitySetName=\u context.MetadataWorkspace.GetEntityContainer(\u context.DefaultContainerName,DataSpace.CSpace).BaseEntitySets。
其中(q=>q.ElementType.Name==typeof(T).Name.FirstOrDefault().Name;
string entitySetKEYName=string.Format(“{0}.{1}”,_context.DefaultContainerName,entitySetName);
EntityKey=新的EntityKey(entitySetKEYName,“XTableId”,id);
return(T)_context.GetObjectByKey(key);
}
如何自动检测主键?????首先,PK在Int32中不是必需的,它可以是Guid,甚至是多属性的复合键,所以通用方法应该将对象作为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);
}
}
static void Main(字符串[]args)
{
var entity=GetEntityByKey(Guid.Empty);
}
私有静态T GetEntityByKey(对象键),其中T:class
{
使用(var context=newobjectcontext(“Name=ModelContainer”))
{
var set=context.CreateObjectSet().EntitySet;
var pk=set.ElementType.KeyMembers[0];//注意这里的计数可能是o或大于0
EntityKey EntityKey=新的EntityKey(set.EntityContainer.Name+““+set.Name,pk.Name,key);
return(T)context.GetObjectByKey(entityKey);
}
}
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);
}
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);
}
}