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;