Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# EF代码第一外键定义/左连接/导航属性?_C#_Entity Framework_Asp.net Mvc 4_Lambda_Foreign Keys - Fatal编程技术网

C# EF代码第一外键定义/左连接/导航属性?

C# EF代码第一外键定义/左连接/导航属性?,c#,entity-framework,asp.net-mvc-4,lambda,foreign-keys,C#,Entity Framework,Asp.net Mvc 4,Lambda,Foreign Keys,假设我有3张桌子: [Table("Comments")] public class Comment { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [ForeignKey("Users")] public int UserId { get; set; } public virtual Users U

假设我有3张桌子:

[Table("Comments")]
public class Comment {
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [ForeignKey("Users")]
    public int UserId { get; set; }
    public virtual Users Users { get; set; }
    public string Text { get; set; }
}

[Table("Users")]
public class Users {
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string UserName { get; set; }
}

[Table("CommentAgree")]
public class CommentAgree {
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public int CommentId { get; set; }
    public int UserId { get; set; }
}
用户发表评论,其他用户可以“同意”该评论,有点像Facebook的“喜欢”系统。我使用lambda进行查询,我可以做到:

var query = db.Comments.Select(c => new {
            c.Id,
            c.Users.UserName,
            c.Text
});
如何创建CommentAgree on
Comment.Id=CommentAgree.CommentId
的加入?我可以在Lambda中编写连接,但我需要它是一个左连接,因为没有人会同意该评论,但我仍然希望它显示出来

我想用正确的方法来做,所以我愿意接受是否通过外键、lambda连接、导航属性来做的建议。。。还是别的什么

这可能吗


多亏了

最好的方法可能是使用Entity Framework的功能并创建导航属性,而不是显式地使用LINQ仅为相关数据执行连接

如果您的类型只是为了数据访问而形成的,那么将导航属性与已有的外键属性一起添加到关系的两端可能是一个好主意

Comment
上的集合导航属性应实现
ICollection
(例如
List
),并且在
CommentAgree
类型上具有类型为
Comment
的参考导航属性

然后,您必须使用数据注释或(最好)fluent API在映射中定义关系


要加载相关数据,您可以使用延迟加载或快速加载(使用
Include
extension方法),也可以使用从实体的条目信息显式加载。

Hmmm好的,我添加了一个公共列表(我忘了提到我有一个来自CommentAgree To Comment的FK)。然后在我的lambda中,我可以执行c.c.Count(),这正是我想要的!我认为这对我来说很好,但我会研究如何正确地映射它,因为我以前没有这样做过,我会检查Fluent API。谢谢你的帮助