我正在使用實體框架6設計多租戶應用程序。此應用程序中的一個關鍵要求是每個承租人都可以擁有自定義表格。這意味着一個具有相同名稱的表可能在模式之間有所不同。自定義數據庫表的自定義實體生成器
例如,一個承租人可能有一個「人」表,其中包括:ID,名字,姓氏,出生日期。
另一個房客可能有一個「人」表,其中包括:ID,名字,姓氏,出生日期,收藏顏色。
當我設計我的模型,這就是我:
public class Person
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
}
這適用於第一個租戶,但在第二承租人自定義列將不會加載。我所希望做的是這樣的:
public class Person : Dictionary<string, object>
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
}
,然後寫一個自定義的模型映射器/生成器,將會把誰沒有匹配的屬性到字典集合的表列。
有幾個問題是:
實體框架創建一個SELECT語句,列出了所有的 屬性/列在模型中。不知怎的,我需要用*替換 列表,以便所有列,即使是EF不知道 的列,都會返回。
我需要能夠攔截結果集,將已知列 映射到模型屬性,並將未知列置於 字典中。
這是否可能?有沒有更好的方法來解決這個問題?
那麼,看看'EF'是否能夠提供一些開箱即用的東西是非常有趣的。我能想到的是製作像CustomColumns這樣的枚舉類型,並且有一個像PeopleCustomColumns結點表這樣的表,或者按照這個順序。 – Leron
是的,這個問題有三種解決方案:1.有另一個緊密相關的表「extra」列信息2.向每個可以用於自定義用途的表添加通用列,以及3.在模式之間處理具有不同佈局的表。前兩個並不難創建,但需要額外的開銷。由於靈活性和缺乏管理費用,最後的解決方案對我來說是理想的。 – Sparafusile