插入和删除复杂结构

时间:2011-04-26 07:40:26

标签: c# .net entity-framework

我有以下代表表的类:

public class PriceDefinition
    {
        public virtual long Id{get;set;}
        public virtual IList<Rule> Rules{get; set;}
        public virtual IList<PriceDefinitionAddition> Additions{get; set;}
        public virtual IList<CustomerPrice> CustomersPrices { get; set; }

        public PriceDefinition() { }
}

public class Rule
{
    public virtual long PriceDefinitionId { get; set; }
    public virtual string FieldName { get; set; }
    public virtual string Values { get; set; }
    public virtual string Text { get; set; }

    public Rule() { }
}

public class CustomerPrice
{
    public virtual long Id { get; set; }
    public virtual long CustomerId { get; set; }
    public virtual long PriceDefinitionId { get; set; }
    public virtual long TaskPriceId { get; set; }
    public virtual Price TaskPrice { get; set; }
    public virtual IList<CustomerAdditionPrice> AdditionsPrices { get; set; }

    public CustomerPrice() { }
}

public class CustomerAdditionPrice
{
    public virtual long CustomerPriceId { get; set; }
    public virtual long AdditionId { get; set; }
    public virtual long PriceId { get; set; }
    public virtual Price Price { get; set; }

    public CustomerAdditionPrice() { }
}

public class Price
{
    public virtual long Id { get; set; }
    public virtual decimal PriceSum { get; set; }
    public virtual decimal PricePercent { get; set; }
    public virtual long? UnitTypeId { get; set; }
    public virtual UnitTypeWrapper UnitTypeWrapper { get; set; }
    public UnitTypeEnum UnitType { get { return UnitTypeWrapper; } }

    public Price() { }
}

public class PriceDefinitionAddition
{
    public virtual long PriceDefinitionId { get; set; }
    public virtual long AdditionId { get; set; }

    public PriceDefinitionAddition() { }
}

我有一个PriceDefinition的id,我必须删除所有相关数据。我是否必须遍历所有这些复杂的结构?如何使用include然后加载对象以加载整个结构?有没有简单的方法可以删除所有这些结构?

我有PriceDefinition对象,我必须插入包含其所有相关数据。我怎么能这样做,当我调用SaveChanges时,所有的id都会获得适当的值?我是否必须迭代所有元素才能插入所有元素?

1 个答案:

答案 0 :(得分:3)

要解决删除问题 - 在数据库和实体设计器中使用级联删除。如果不使用级联删除,则必须将整个结构加载到应用程序中并逐个删除实体。

要解决插入问题 - 使用所有新的相关实体准备新实体,并在主实体上使用AddObject。它还将添加未被上下文跟踪的所有相关实体。如果您的ID由数据库生成并在您的实体设计器中使用StoreGeneratedPattern.Identity正确设置,则无需执行任何操作。

编辑:

另一种方法是使用存储过程删除结构,如果它太复杂,因为加载结构并逐个删除实体(=每次删除一次DB往返)可能会非常慢。