在继承的表中实现行级安全性列

时间:2018-01-05 10:32:57

标签: c# sql-server entity-framework row-level-security ef-code-first-mapping

我正在使用Entity Framework和代码优先的方法来生成数据库。我在SQL Server中引入了行级安全性。

我想创建3个表,其中所有公共属性都转到ItemVersion,并将相关属性记录到DocumentVersion,并将相关内容与FormVersion形成相应的内容。我应该在所有3个表中引入行级安全列TenantId

interface ITenantSecurityPolicy
{
    int TenantId { get; set; }
}

public class ItemVersion : ITenantSecurityPolicy
{
    public int Id { get; set; }
    public int CreatedPersonId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public int TenantId { get; set; }
}

[Table("DocumentVersions")]
public class DocumentVersion : ItemVersion
{
    [StringLength(100)]
    public string DocumentVersionNumber { get; set; }
    public int FileId { get; set; }
}

[Table("FormVersions")]
public class FormVersion : ItemVersion
{
    public string DesignerContentId { get; set; }
}

当我生成数据库时,它不会在子类中创建TenantId - 列TenantId仅在ItemVersion表中创建。

我该如何处理这种情况?有没有解决方法或建议?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案也可能是多租户架构的正确关系设计:使TenantId成为主键中的前导列。

public class ItemVersion : ITenantSecurityPolicy
{
    [Key,Column(Order=0)]
    public int TenantId { get; set; }
    [Key,Column(Order=1),DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public int CreatedPersonId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }

}