C#Complex Property Setter选项

时间:2014-04-19 20:22:42

标签: c# asp.net-mvc-4 asp.net-mvc-5

我有一个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是枚举,可以是CommentsPosts。我还在帖子模型和评论模型中添加了以下导航属性:

public virtual ICollection<Like> Likes { get; set; }

我的问题是,我可以在上面的代码行中设置一个setter函数,它会自动为Like类型设置CommentsPosts吗?我知道我可以在Setter中使用Value变量,但是使用Google我无法找到如何将它用于复杂类型,如上所述(Like)。

我确信这是一个更好的方法,这比在手动设置存储库中的每次我保存类似的枚举更好。

更新:

看到我们如何就这个问题开始一个很好的小谈话,我将在混合中提出另一种选择。

两个基类为Like的表,一个CommentLikes和另一个PostLikes如何看到这个表的大小会快速增长,我想将它们分开可能是好事,对吗?

3 个答案:

答案 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 Likes来扩展它>

// 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。你不能查询它,但你不需要。根据我的经验,我从来不需要。