我正試圖寫一些對我來說簡單的場景。在我們的大多數應用程序中,我們有一個允許用戶編輯下拉列表值的系統 - 查找表。如何通過表的字符串名稱查詢EF中的表?
下拉表通常非常小,僅僅由幾個領域:
- ID(PK,INT身份1,1)
- 說明(爲nvarchar)
- LastModifiedBy(爲nvarchar )
- LastModifiedDate(SMALLDATETIME)
他們可能有無ADDI各個領域顯然會有所不同。 id,LastModifiedBy和LastModifiedDate屬性都在一個基本實體類中定義,我們所有其他實體從該實體類派生出來。
我們需要能夠查詢一個實體的EF上下文,這個實體除了三個公共字段外,在運行時直到完全是未知的(包括名稱/類型和字段)。這否定了泛型,這是非常棒的。我們能夠自己解決很多反射問題 - 這將處理未知的列,因爲我們可以列舉我們的屬性並從那裏出發。我們看到的更難的問題是試圖查詢EF,並在我們直到運行時才知道表時才返回可序列化的實體。
所以我想問這個最簡單的方法是:我怎樣才能查詢EF,並獲得一個可序列化的實體,使用實體的字符串名稱?
我們正在尋找實現是一個方法的簽名看起來是這樣的:
public BaseEntity RetrieveEntity(string entityType, int? id);
一旦我們在地方的核心,我們應該能夠輕鬆地適應我們的其他情形(插入,更新,檢索網格的分頁列表等)。
只要我們有一些具體的工作,我們可以使用上面的表格定義。我們會打電話給實體StatusCode
,並承擔其定義如下:
public partial class StatusCode : BaseEntity // BaseEntity gives us id, LastModifiedBy, LastModifiedDate
{
public string StatusCodeDescription { get; set; }
}
public class StatusCodeMap : EntityTypeConfiguration<StatusCode>
{
// boilerplate comments removed for brevity
this.HasKey(t => t.id);
this.Property(t => t.StatusCodeDescription)
.IsRequired()
.HasMaxLength(255);
this.ToTable("StatusCode");
this.Property(t => t.id).HasColumnName("StatusCodeId");
this.Property(t => t.StatusCodeDescription).HasColumnName("StatusCodeDescription");
this.Property(t => t.LastModifiedBy).HasColumnName("LastModifiedBy");
this.Property(t => t.LastModifiedDate).HasColumnName("LastModifiedDate");
}
IF我可以明確指出,所有的下拉菜單將有一個描述,不出意外的話我可以創造一個抽象類從下拉列表中導出並處理。儘管如此,我仍然必須能夠通過名稱動態查詢並檢索該對象的實例。誠然,我不能保證這是事實。其中一些將有其他字段 - 布爾屬性在這裏或那裏,也許代碼映射到描述用於後端集成等。所以只使用基類不是解決方案,並且不會充分發揮。 PS:我敢肯定,這其實是一個騙局。我知道我不能成爲第一個遇到這個問題的人。如果我們能夠在SO上的其他地方找到解決方案,我很樂意關閉它。但是,我花了整整一個下午的時間在Google上尋找解決這個問題的整體解決方案,並且失敗了。也就是說,我的Google-Fu今天可能會讓我失望。
通用DbSet這可能幫助:http://stackoverflow.com/q/19259299/139917 – DaveB
@DaveB:謝謝,我想一些方法中有可能會。 –