C# 使用复合键“Find”有没有等效的方法

C# 使用复合键“Find”有没有等效的方法,c#,entity-framework,linq,interface,entity-framework-6,C#,Entity Framework,Linq,Interface,Entity Framework 6,我想知道是否有任何等效的方法可以使用复合键查找 例如: public CITY Find(int id) { return context.CITies.Find(id); } 这是完美的解决方案吗: public CITY Find(int comId1, int comId2) { return context.CITies.Where(c => c.CITY_ID == comId1 && c.COUNT

我想知道是否有任何等效的方法可以使用复合键
查找

例如:

 public CITY Find(int id)
  { 
    return context.CITies.Find(id);
  }
这是完美的解决方案吗:

 public CITY Find(int comId1, int comId2)
        {
            return context.CITies.Where(c => c.CITY_ID == comId1 && c.COUNTRY_ID == comId2).SingleOrDefault();
        }

我尝试在我的界面中实现以下方法:

T Find(int id);
T Find(int comId1,int comId2);
方法支持多个参数,唯一的问题是您需要确保按正确的顺序传递密钥:

context.CITies.Find(comId1, comId2);
当您有复合键时,实体框架要求您定义键属性的顺序。可以使用注释来指定顺序。您也可以使用Fluent Api对密钥进行如下配置:

modelBuilder.Entity<Cities>().HasKey(t => new { t.Id1, t.Id2 }); 

请您澄清一下正确的顺序是什么意思?假设我有复合键
id:int
fromdate:datetime
查找方法依赖于什么顺序?现在我使用的是
edmx
你是指
xml
中列的
顺序
,我很久以前没有使用过edmx,但据我所知,如果您使用的是EF 6,您的edmx应该生成流畅的Api配置。如果您在我的回答中发现像show这样的流畅api配置,请检入生成的代码。如果您不打算为所有实体(如模式)创建泛型类,则不应使用泛型方法。您应该像之前一样声明它,但要将对象数组作为参数传递
public T Find<T>(params object[] keyValues) where T: class
{ 
  return context.Set<T>().Find(keyValues);
}