LINQ:在实体上创建子表(如果尚未存在)

时间:2010-11-23 20:47:46

标签: .net linq

我正在尝试创建一种方法,可以更新实体的子表,无论它是新的还是现有的。我的理解是,对于新实体,我添加这样的孩子:

ChildEntityENT child = new ChildEntityENT();
Entity.ChildEntityENT = child;

从那时起,我可以像这样访问它:

Entity.ChildEntityENT.Value1 = MyValue;
Entity.ChildEntityENT.Value2 = MyValue;

但我有一个基类,我想使用各种Entity和ChildEntityENT类型。我最初的想法是沿着这些方向做一些事情,但我似乎无法使其发挥作用。基本上我打算让开发人员使用lambda表达式从基本实体指向ChildEntityENT,然后我的方法将检查ChildEntityEnt并实例化一个新的空白副本(如果尚不存在)。如果确实存在,则不需要做任何事情。

public void CreateIfNull(Expression<Func<Entity, object>> Child)
{
    if (Entity.Child == null)
    {
        ChildENT = new ChildENT();
        Entity.ChildENT = ChildENT;
    }
}

如果我完全错过了这个球,请告诉我。我一直在寻找更简单的方法来做事。我希望LINQ在尝试为其赋值之前不要求我手动创建新的ChildEntityENT。

编辑:我实际上是想和这个人做同样的事情:Adding a child entity to parent entityset

1 个答案:

答案 0 :(得分:0)

我最终解决了这个问题。

    public void CreateChildIfNull(LambdaExpression Child)
    {
        Type ChildType = Child.Body.Type;
        var NewChild = Activator.CreateInstance(ChildType);
        Entity.GetType().GetProperty(ChildType.Name).SetValue(Entity, NewChild, null);
    }