我想弄清楚如何建模通知。这就是我的尝试。
public class NotificationType
{
public int NotificationTypeID { get; set; }
public string Type { get; set; }
public string Action { get; set; }
}
public class Notification
{
public int NotificationID { get; set; }
public bool ReadStatus { get; set; }
public DateTime DateCreated { get; set; }
[ForeignKey("User")]
public int UserID { get; set; }
[ForeignKey("NotificationType")]
public int NotificationTypeID { get; set; }
public int CommentID { get; set; }
public int ProjectID { get; set; }
public Comment Comment { get; set; }
public Project Project { get; set; }
public NotificationType NotificationType { get; set; }
public User User { get; set; }
}
坦率地说,我觉得我不知道自己在做什么,但是让我告诉你我想做什么,如果这是个坏主意,请告诉我,如果不是,请告诉我我是怎么做的。< / p>
我有Notifications
用于与Comment
,Reply
和Project
相关的操作 - 这就是我拥有所有这些导航属性和字段的原因。我想基本上使用NotificationType
来确定它是什么,然后使用适当的ID字段来获取信息以向用户显示通知。
第一个问题,我似乎无法将这些ID(CommentID
ProjectID
)字段设为Nullable,因此我并不总是需要它们。
如何使用数据注释和/或流畅的api或者设计我的模型更好地使它们可以为空?
答案 0 :(得分:2)
让它们成为可以为空的属性
public class Notification
{
public int NotificationID { get; set; }
public bool ReadStatus { get; set; }
public DateTime DateCreated { get; set; }
[ForeignKey("User")]
public int UserID { get; set; }
[ForeignKey("NotificationType")]
public int NotificationTypeID { get; set; }
public int? CommentID { get; set; }
public int? ProjectID { get; set; }
public Comment Comment { get; set; }
public Project Project { get; set; }
public NotificationType NotificationType { get; set; }
public User User { get; set; }
}
然后使用流畅的API
modelBuilder.Entity<Notification>().HasOptional(n => n.Comment).WithMany()
.HasForeignKey(n => n.CommentID);
答案 1 :(得分:1)
我发现这是一种复杂但完整的通知系统:http://library.blackboard.com/ref/df5b20ed-ce8d-4428-a595-a0091b23dda3/Content/Mini_TOCs/mt_admin_app_system_manage_comm_notify_frame.htm 我认为可以从中借鉴许多好的想法。