【发布时间】:2018-06-14 09:53:06
【问题描述】:
我试图弄清楚如何制作一个通用实体对象。我有大约 5 种不同的实体类型,它们具有共同的属性。
我创建了一个抽象类 TableBase & Interfaces,允许我处理实体的父级和子级:
public interface IHasChildren
{
IEnumerable<object> Children { get; }
}
public interface IHasParent{
Object Parent { get; }
}
public abstract class TblBase : INotifyPropertyChanged
{
....
properties such as
int ParentID
int COID
bool IsSelected
bool IsExpanded
....
}
//tblLine is one of my 5 entity type classes which build up a hierarchy
public partial class tblLine : TblBase, IHasChildren, IHasParent
{
public virtual ObservableCollection<tblGroup> tblGroups { get; set; }
public virtual tblProject tblProject { get; set; }
}
这是我目前的代码:
public static bool AddNode(ProjectEntities DBContext, LocalUser User, object ParentEntity)
{
var BaseEntity = (TblBase)ParentEntity;
var ChildType = ((IHasChildren)ParentEntity).Children.GetType().GetGenericArguments()[0];
Object NewNode = new tblLine
{
ParentID = BaseEntity.ID,
COID = User.ID,
IsSelected = true,
IsExpanded = true
} as object;
DBContext.Set(ChildType).Add(NewNode);
return true;
}
你可以看到这里的问题,NewNode 是特定类型的,只会让我将此对象添加到它的集合类型中。 我需要通过某种方式将它接受的对象类型添加到集合中。
【问题讨论】:
-
为什么不像
AddNode<T>那样向AddNode添加通用参数。在这种情况下,您可以传递所需的类型。 -
我试过了。看看下面的结果
-
你能发布一下 tblLine 是如何声明的吗?
-
我已将其添加到问题@user1672994
标签: c# entity-framework generic-programming