我正在设计一个多租户网站,首先使用EF6代码,MVC和其他来自MS堆栈的网站。多租户和EF6设计
我想为每个租户公告。很简单,我的EF代码第一类将是这个样子:
class Announcement
{
public Announcement()
{
DateCreated = DateTime.Now;
}
[Key]
public int Id { get; set; }
public DateTime DateCreated { get; set; }
public string Title { get; set; }
public string Message { get; set; }
public virtual Tenant Tenant { get; set; }
public ApplicationUser Author { get; set; }
}
我的设计的问题是什么,如果我想要的网站管理员不得不发布通知到所有租户的能力吗?
由于数据库将强制Tenant关系,因此我无法将Tenant属性设置为虚假。
在EF之前,我会做这样的事情,但现在我会失去很好的EF导航属性。
class Announcement
{
public Announcement()
{
DateCreated = DateTime.Now;
}
[Key]
public int Id { get; set; }
public DateTime DateCreated { get; set; }
public string Title { get; set; }
public string Message { get; set; }
public int TenantID { get; set; }
public ApplicationUser Author { get; set; }
}
我会适当地使用TenantID所有基于租客通知,但将其设置为0站点范围内的通知。
那么,有没有更好的设计(除了两个类/表),仍然可以利用EF导航属性?
你为什么选择该模式同出一tenantid问题。你可以将它设置为db中的一个可为空的属性,模型将具有'public int? tenantId {get; set;}' – Saravanan
这是我的问题的基础。我知道我可以使用一个int TenantID字段(可以为空或不可),但是我失去了很好的EF导航属性。 –
我认为在一个多租户应用程序中,您应该为独立于租户的内容分离结构。在这种情况下:单独的“SiteAnnouncement”表。它看起来可能是多余的,但是您应该将租户数据视为单独的数据库。例如,如果将来你想记录哪个租户已经阅读了哪个公告?对于这两种公告来说,情况会大不相同。 –