0
我想創建一個通用函數來在實體框架中添加關係記錄。我正在研究以下解決方案。儘管如果我正在談論這個問題,你能否指引我走向正確的方向。使用反射找到一個集合屬性,然後添加到集合
我有以下幾個類。還要注意這是實體框架中的第一種代碼方法。
public class MainTable
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MainTableID { get; set; }
public int LookupID { get; set; }
[ForeignKey("LookupID")]
public virtual LookupTable Lookups { get; set; }
}
public class LookupTable
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int LookupID{ get; set; }
public string LookupText { get; set; }
public virtual ICollection<MainTable> MainTable { get; set; }
}
然後我有下面的代碼,我試圖添加MainTable和LookupTable之間的關係。我首先傳遞兩個表類類型並傳遞記錄添加和集合屬性的名稱。
問題是,只要我嘗試轉換它(ICollection(MainTable)),「collectionField」就是NULL。我需要將「collectionField」變成ICollection(MainTable)類型,所以我可以添加MainTable記錄,除非我以錯誤的方式進行。
public void AddRelationalRecord<MainTableType, LookupTableType>(MainTableType recordToAdd, string collectionFieldName)
where MainTableType: class
where LookupTableType: class
{
var collectionField = typeof(LookupTableType)
.GetProperties()
.Where(prop => prop.Name == collectionFieldName)
.FirstOrDefault();
collectionField.Add(recordToAdd);
}
不該你傳遞'LookupTableType'到'AddRelationalRecord'的實例? –
*那*有多有用?你失去了編譯時類型檢查,你必須提供一個簡單的'a.Collection.Add(b)'語句所需的所有東西。它不會有用地封裝'Add'方法。 –
@Yacoub - 是的,你是對的。需要傳遞LookupTableType的實例 – Kogroth