我正在设计一个多租户网站,首先使用EF6代码,MVC和其他来自MS堆栈的网站。
我想为每个租户发布公告。很简单,我的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; }
}
如果我希望网站管理员能够向所有租户发布公告,我的设计问题是什么?
由于数据库会强制租户关系,我无法将租户属性设置为人为的。
在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导航属性?
答案 0 :(得分:0)
有什么问题
class Announcement
{
public Announcement()
{
DateCreated = DateTime.Now;
}
[Key]
public virtual int Id { get; set; }
public virtual DateTime DateCreated { get; set; }
public virtual string Title { get; set; }
public virtual string Message { get; set; }
public virtual int TenantID { get; set; } // during insert/Update set as required. the tenant should exist.
// A dummy SYSTEM wide tenant may be an option to consider
// navigation props
[ForeignKey("TenantID")]
public virtual Tenant Tenant { get; set; } // <<<<< NAV as before
public virtual ApplicationUser Author { get; set; }
}