我有一个ASP.Net MVC 5(C#)应用程序,我给了我的用户喜欢帖子和评论的能力。
为此,我有一个名为Likes的模型,具有以下属性:
public class Like
{
public Like()
{
this.CreatedUTC = System.DateTime.UtcNow;
this.isActive = true;
}
public long id { get; set; }
public string UserID { get; set; }
public bool isActive { get; set; }
public LikeType Type { get; set; }
public DateTime CreatedUTC { get; set; }
}
Type
是枚举,可以是Comments
或Posts
。我还在帖子模型和评论模型中添加了以下导航属性:
public virtual ICollection<Like> Likes { get; set; }
我的问题是,我可以在上面的代码行中设置一个setter函数,它会自动为Like类型设置Comments
和Posts
吗?我知道我可以在Setter中使用Value
变量,但是使用Google我无法找到如何将它用于复杂类型,如上所述(Like
)。
我确信这是一个更好的方法,这比在手动设置存储库中的每次我保存类似的枚举更好。
更新:
看到我们如何就这个问题开始一个很好的小谈话,我将在混合中提出另一种选择。
两个基类为Like的表,一个CommentLikes
和另一个PostLikes
如何看到这个表的大小会快速增长,我想将它们分开可能是好事,对吗?
答案 0 :(得分:1)
我宁愿放弃&#34; LikeType&#34;并且在Like实体中具有Comment和Post实体,并通过其中一个为空来区分或引入两个新实体
public class CommentLike
{
public Comment Comment { get; set; }
public Like Like { get; set; }
}
持有评论等,PostLike持有帖子等。然后,评论看起来像这样
public Comment
{
public virtual ICollection<CommentLike> { get; set; }
}
另一种方法是创建单独的表以供评论和发布。虽然你要求的是绝对可行的,但我会建议更详细但更简单的解决方案,这将导致代码更容易维护并且具有更少的错误。您想要拥有LikeType属性有什么特定原因吗?
答案 1 :(得分:0)
我的问题是,我可以在上面的代码行中使用setter函数吗? 它会自动设置Like类型的评论和帖子吗?
我假设您使用的是T4模板,或者EF生成的类是partial
,那么您可以通过为wrapper property
// Backing field
private ICollection<Like> _likesWrapper;
public ICollection<Like> LikesWrapper {
get {
// Lazy loading
if(_likes == null)
{
// Just create a new list or load it from the database.
_likes = new List<Like>();
}
return _likes;
}
set {
foreach(var val in value)
{
//Set the comment and posts
}
Likes = value;
}
答案 2 :(得分:0)
我有同样的问题,但没有遇到一个简单的方法。
class Post{
public virtual ICollection<Like> Likes {set;get;}
}
class Comment{
public virtual ICollection<Like> Likes {set;get;}
}
Then:
class Like{
//....
}
你不需要双向关系。您是否有需要查询Likes
表的情况?如果你这样做,你将不得不管理它作为ENUM解析它可以作为扩展方法。
EF将在您的表格设计中巧妙地创建Post_Id和Comment_Id。你不能查询它,但你不需要。根据我的经验,我从来不需要。