我有以下代表表的类:
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都会获得适当的值?我是否必须迭代所有元素才能插入所有元素?
答案 0 :(得分:3)
要解决删除问题 - 在数据库和实体设计器中使用级联删除。如果不使用级联删除,则必须将整个结构加载到应用程序中并逐个删除实体。
要解决插入问题 - 使用所有新的相关实体准备新实体,并在主实体上使用AddObject
。它还将添加未被上下文跟踪的所有相关实体。如果您的ID由数据库生成并在您的实体设计器中使用StoreGeneratedPattern.Identity正确设置,则无需执行任何操作。
编辑:
另一种方法是使用存储过程删除结构,如果它太复杂,因为加载结构并逐个删除实体(=每次删除一次DB往返)可能会非常慢。