许多类型的用户通知的数据模型

时间:2013-01-26 05:18:38

标签: entity-framework ef-code-first data-modeling

我想弄清楚如何建模通知。这就是我的尝试。

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用于与CommentReplyProject相关的操作 - 这就是我拥有所有这些导航属性和字段的原因。我想基本上使用NotificationType来确定它是什么,然后使用适当的ID字段来获取信息以向用户显示通知。

第一个问题,我似乎无法将这些ID(CommentID ProjectID)字段设为Nullable,因此我并不总是需要它们。

如何使用数据注释和/或流畅的api或者设计我的模型更好地使它们可以为空?

2 个答案:

答案 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 我认为可以从中借鉴许多好的想法。