Вставить и удалить сложную структуру - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть следующие классы, которые представляют таблицы:

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, и я должен удалить все связанные данные. Должен ли я перебирать всю эту сложную структуру? Как я могу использовать include, а затем загрузить объект, чтобы загрузить всю структуру? Есть ли простой способ удалить всю эту структуру?

У меня есть объект PriceDefinition, и я должен вставить все связанные с ним данные. Как я могу сделать это так, чтобы при вызове SaveChanges все идентификаторы получали соответствующие значения? Нужно ли повторять все элементы, чтобы вставить их все?

1 Ответ

3 голосов
/ 26 апреля 2011

Чтобы решить удаление - используйте каскадное удаление как в базе данных, так и в Entity Designer.Если вы не используете каскадное удаление, вы действительно должны загрузить всю структуру в свое приложение и удалить сущности одну за другой.

Чтобы решить проблему вставки - подготовьте новую сущность со всеми новыми связанными сущностями и просто используйте AddObjectна основной сущности.Также будут добавлены все связанные объекты, не отслеживаемые контекстом.Если ваши идентификаторы генерируются базой данных и правильно установлены с помощью StoreGeneratedPattern.Identity в вашем конструкторе сущностей, вам не нужно больше ничего делать.

Редактировать:

Другой способпросто используйте хранимую процедуру для удаления структуры, если она слишком сложна, потому что загрузка структуры и удаление объектов по одному (= одно обращение к БД для каждого удаления) может быть очень медленным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...