我正在使用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
表中创建。
我该如何处理这种情况?有没有解决方法或建议?
答案 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; }
}