多租户和EF6设计

时间:2014-03-29 11:07:05

标签: entity-framework multi-tenant

我正在设计一个多租户网站,首先使用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导航属性?

1 个答案:

答案 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; }
}
相关问题