asp.net mvc 4-C#复杂属性设置器选项
本文关键字:设置 选项 属性 复杂 net mvc 4-C# asp | 更新日期: 2023-09-27 17:59:06
我有一个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
。我还将以下导航属性添加到Post Model和Comment Model中:
public virtual ICollection<Like> Likes { get; set; }
我的问题是,我能在上面的代码行中有一个setter函数吗?它会自动为Like类型设置Comments
和Posts
?我知道我可以在Setter中使用Value
变量,但使用Google时,我找不到如何将其用于上面提到的复杂类型(Like
)。
我相信这将是一种更好的方式来做到这一点,而不是在存储库中手动设置枚举,每次我要保存一个赞。
更新:
看到我们如何就这个问题展开一场愉快的小对话,我将在组合中加入另一种选择。
两个基类为Like的表怎么样,一个CommentLikes
,另一个PostLikes
看到这个表的大小会增长得很快,我想把它们分开可能是件好事,对吧?
我宁愿去掉"LikeType",要么在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属性的具体原因是什么?
我遇到了同样的问题,但并没有遇到简单的方法。
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。你不能查询它,但你不需要。根据我的经验,我从来没有需要过。
我的问题是,我能在上面的代码行中有一个setter函数吗在那里它会自动为"赞"类型设置"评论和帖子"?
我假设您使用的是T4模板,或者EF生成的类是partial
,那么您可以通过为Likes
创建另一个分部类和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;
}