我正在尝试创建一个通用函数来在实体框架中添加关系记录。我正在研究以下解决方案。虽然如果我这么做,那么你可以指引我走向正确的方向。
我有以下课程。另请注意,这是实体框架中的代码优先方法。
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之间添加关系。我首先传递两个表类类型,并传递记录添加和集合属性的名称。
问题是&#34; collectionField&#34;每当我尝试转换它时都为NULL(ICollection(MainTable))。我需要&#34; collectionField&#34;成为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);
}
答案 0 :(得分:0)
从评论中我决定改变我对此的态度。如果有人有兴趣,以下代码可以使用。
public void AddRelationalRecord(object recordToAdd, object recordWithCollection, string collectionFieldName)
{
var collectionProp = recordWithCollection.GetType().GetProperty(fieldName);
collectionProp.PropertyType.GetMethod("Add").Invoke(aaa.GetValue(recordWithCollection, null), new object[] { recordToAdd });
}