Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Entity framework 如何在EF Core/Dotnet Core中进行查询,而无需借助连接_Entity Framework_.net Core_Entity Framework Core - Fatal编程技术网

Entity framework 如何在EF Core/Dotnet Core中进行查询,而无需借助连接

Entity framework 如何在EF Core/Dotnet Core中进行查询,而无需借助连接,entity-framework,.net-core,entity-framework-core,Entity Framework,.net Core,Entity Framework Core,我有两张桌子: // pseudo code: class User { int UserID; // primary key string name; IEnumerable<Checklist> Checklists; } class Checklist { int ChecklistID; // primary key String name; } 它总是求助于两个查询,一个是用户ID,然后是选择+加入: Select .... from Users

我有两张桌子:

// pseudo code:

class User {
  int UserID; // primary key
  string name;
  IEnumerable<Checklist> Checklists;
}

class Checklist {
  int ChecklistID; // primary key
  String name;
}
它总是求助于两个查询,一个是用户ID,然后是选择+加入:

Select .... from Users where ..UserID=@__ID
 .......
Select ... from Checklists C
INNER JOIN ( Select ... from User 
     where 
     UserID = @__id_0
     .....
) as T on C.UserID = T.UserID;
问题是我已经有了用户的ID,所以我宁愿让EF做一个简单的查询,如下所示:

Select ... from Checklists where UserID = 1;

而不是使用ID查询用户,然后在新的检查表查询中使用该用户ID,其中UserID=该ID

导航属性是EF的主体。因此,您的details类应该公开其外键属性。省略它们是没有意义的

class Checklist {
  int ChecklistID; // primary key

  int UserId { get; set; }  // Foreign Key, the std naming patterns will match these
  User User { get; set; }

  String name;
}

EF Core在这方面比EF6灵活得多。除显式定义的属性外,它还允许您通过以下方法在LINQ查询中使用:

在实体实例上寻址给定属性。当您希望在LINQ查询中引用阴影状态属性时,这非常有用

因此,对于您的原始模型,您可以使用:

var result = from checklist in _context.Checklists
             where EF.Property(checklist, "UserId") == id;

当然,您总是可以在模型中添加显式导航和/或FK属性,但如果您不想这样做,最好使用此选项(导航和FK属性都不是必需的)。

所以您没有
\u上下文。检查列表
?为什么不呢?我有,但是我没有可用的UserID作为一个_context.Checklists.Where(p=>p.UserID)可以工作..为什么不在清单中映射用户和UserID呢?在EF术语中,它是一个断开的主/细节。然后我将添加UserID。我只是认为有一个技巧可以引用“UserID”属性,因为它确实存在于数据库中。谢谢你的意见。你为什么不建议这样一个答案:“只需将UserID添加到Checklist类中,然后执行一个_context.Checklist.Where(p=>p.UserID==id)”,我将接受它作为一个答案。好吧,我认为EF会以某种方式使UserID可用,而不是我在类本身中指定它。谢谢你的提示:-)
var result = from checklist in _context.Checklists
             where EF.Property(checklist, "UserId") == id;