c# - 在撰写评论时在用户之间建立关系

标签 c# sql .net postgresql entity-framework

想要创建一个 Reviews 表,但对我需要在其中放置哪些外键感到困惑。我希望 ONE 用户能够在 SECOND 用户的页面上留下评论。这是我目前的模型。我需要在那里添加什么?

评论

using System;
using System.Collections.Generic;

namespace sellwalker.Models
{
    public class Review : BaseEntity
    {
        public int ReviewId{get;set;}
        public string Content{get;set;}
        public DateTime CreatedAt{get;set;}
        public int UserId{get;set;}
        public User Reviewer {get;set;}


    }
}

用户

using System;
using System.Collections.Generic;

namespace sellwalker.Models
{
    public class User : BaseEntity
    {   

        public int UserId{get;set;}
        public string FirstName{get;set;}
        public string LastName{get;set;}
        public string Email{get;set;}
        public string Password{get;set;}
        public string Status{get;set;}
        public string ProfilePic {get;set;}

        public List<Order> Orders {get;set;}
        public List<Product> products {get;set;}
        public List<Review> Reviews {get;set;}
        public User()
        {
            Orders = new List<Order>();
            products = new List<Product>();
            Reviews = new List<Review>();
        }
    }
}

使用当前表我可以写评论,但我想将它链接到特殊用户。系统不允许我在那里再添加一个 UserId,那么最好的解决方案是什么?

最佳答案

你可以使用类似的东西:

审核模型:

public class Review
{
    public int Id { get; set; }

    //...

    public int ReviewerId { get; set; }
    public virtual User Reviewer { get; set; }
    public int ReviewedUserId { get; set; }
    public virtual User ReviewedUser { get; set; }
}

用户模型:

public class User
{
    public int Id { get; set; }

    //...

    public virtual ICollection<Review> WrittenReviews { get; set; } = new HashSet<Review>();
    public virtual ICollection<Review> MyReviews { get; set; } = new HashSet<Review>();
}

然后您必须使用流畅的 API 指定连接,因为 EF 不知道哪个导航属性属于哪个。

流畅的 API 代码:

modelBuilder.Entity<Review>()
    .HasRequired(x => x.ReviewedUser)
    .WithMany(x => x.MyReviews);

modelBuilder.Entity<Review>()
    .HasRequired(x => x.Reviewer)
    .WithMany(x => x.WrittenReviews);

关于c# - 在撰写评论时在用户之间建立关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48956345/

相关文章:

c# - 远程托管服务器上 Web 服务的间歇性问题

.net - Microsoft Sync Framework 2.1 - 示例项目、编写提供程序、更改跟踪、元数据

sql - 从 SQL/SSRS 2005 中的每一行中选择最大日期的列名

C# :- P/invoke signature

c# - 通过 gmail SMTP 服务器 (SSL) 发送电子邮件

c# - 我如何为一个呈现自身的对象编写接口(interface),同时允许轻松的单元测试?

mysql - 从 MySQL Workbench 更新 BLOB

mysql - SQL:计算/求和特定日期范围内的列

c# - 是否有类似 boost::asio for .NET (Mono) 的东西?

c# - Linux 上带有单声道的 ServiceStack