Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在EntityKey上编写通用主键查找器?_C#_Visual Studio 2010_Entity Framework_Generics_Repository Pattern - Fatal编程技术网

C# 如何在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。

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


但是我不想用这个。我的表主要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);
        }
    }