none
EF: навигационные свойства созданного объекта. RRS feed

  • Общие обсуждения

  • Подскажите, как можно работать с навигационными свойствами только что созданного POCO объекта?

    Задача примерно такая:

    Есть классы Item и Template, связанные отношением "один ко многим"

     

    public class Item
    {
    	[Key]
    	public int Id { get; set; }
    	
    	public int TemplateId { get; set; }
    	public virtual Template { get; set; }
    }
    
    public class Template
    {
    	[Key]
    	public int Id { get; set; }
    	
    	public virtual ICollection<Item> Items { get; set; }
    
    	public int ItemsCreated { get; set; }
    }
    

    Все это мапится через DbContext, который скрыт внутри репозиториев:

    public class MyContext : DbContext
    {
    	public DbSet<Item> Items { get; set; }
    	public DbSet<Template> Templates { get; set; }
    }

    Я создаю новый Item, указывая значения внешнего ключа Template. Также я хочу увеличить счетчик созданных Item'ов на соответствующем Template, а потом сохранить все это в базу в одной транзакции. 


     

    var item = new Item { TemplateId = 1;}
    
    item.Template.ItemsCreated++;
    
    _itemsRepository.AddOrUpdate(item);
    _unitOfWork.SaveChanges();

     

    Но проблема в том, что у вновь созданного Item внешний ключ поставлен, а навигационное свойство Template будет null, пока не выполниться сохранение в БД. Можно ли как-то решить эту задачу, не изменяя код таким образом:

     

    var item = new Item { TemplateId = 1;}
    
    var template = _templatesRepository.Find(1);
    template.ItemsCreated++;
    
    _templatesRepository.AddOrUpdate(template);
    _itemsRepository.AddOrUpdate(item);
    
    _unitOfWork.SaveChanges();
    

     

     



    30 марта 2011 г. 11:33

Все ответы

  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    4 апреля 2011 г. 10:29