powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Обновление сложной модели
14 сообщений из 14, страница 1 из 1
Обновление сложной модели
    #38716628
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Есть сложная модель Center (какой-то центр, здание). У центра есть адрес (Address). Address в БД связан с Center по FK с CascadeDelete.
Такая же зависимость между OtherCenter и Address.
Получается, что Address содержит в БД два FK (на Center и OtherCenter) с CascadeDelete.
Так вот, если создать две одинаковые таблицы в БД (например AddressForCenter и AddressForOtherCenter) для Center и OtherCenter соответсвенно, то все обновляется отлично. Если же так, как реализовано сейчас (два поля, - Center_Id и OtherCenter_Id), то вместо обновления (Center или OtherCenter ) добавляется новая запись.
Не подскажите, как исправить, чтоб работало корректно?
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716636
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlex,
у вас что, адрес ссылается на центр?)
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716643
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, по FK
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716644
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У адреса есть свой PK - это Id, но есть еще два FK Center1_Id и Center2_Id
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716647
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
public class Center1
{
public int Id{ get; set; }
...
}
public class Center2
{
public int Id{ get; set; }
...
}
public class Coordinates
{
public int Center1_Id{ get; set; }
public int Center1_Id{ get; set; }
public int Center2_Id{ get; set; }
...
}
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716649
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите, до этого неправильно написал
public class Center1
{
public int Id{ get; set; }
...
}
public class Center2
{
public int Id{ get; set; }
...
}
public class Coordinates
{
public int Id{ get; set; }
public int Center1 Center1{ get; set; }
public int Center2 Center2{ get; set; }
...
}
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716650
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да емое! Вот так
public class Center1
{
public int Id{ get; set; }
...
}
public class Center2
{
public int Id{ get; set; }
...
}
public class Coordinates
{
public int Id{ get; set; }
public virtual Center1 Center1{ get; set; }
public virtual Center2 Center2{ get; set; }
...
}
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716654
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
simlex,
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716677
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос закрыт, спасибо. Кому интересно:
public void Save(Center model)
{
//Здесь Include при необxодимости в Collection
var oldModel = this.Collection.FirstOrDefault(x=>x.Id==model.Id);

if (model.Id == 0)
{
oldModel = model;
_context.Entry(oldModel).State = EntityState.Added;
_context.Entry(oldModel).CurrentValues.SetValues(model);
}
else
{

_context.Entry(oldModel).CurrentValues.SetValues(model);

_context.Entry(oldModel).State = EntityState.Modified;

//Address
model.Address.Id = oldModel.Address.Id;
_context.Entry(oldModel.Address).CurrentValues.SetValues(model.Address);
}
_context.SaveChanges();
}
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716770
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlex,

1) а не логичнее в центре сделать ссылку на его адрес?)
2) Прикольное решение, про Attach вы видимо не слышали. http://msdn.microsoft.com/ru-ru/library/bb896271(v=vs.100).aspx
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716790
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch,а не логичнее в центре сделать ссылку на его адрес
А как тогда задать cascade delete для Address с помощью code first или fluentAPI?
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716791
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
simlex,Прикольное решение, про Attach вы видимо не слышали
Слышал... Дело в том, что при рендеринге представления при создании нового Center1, даже если вписать во View для Addreess Html.HiddenFor(x=>x.Center1_Id), например, то Center1_Id будет null вместо 0... Пока не нашел, как это исправить... Буду признателен, если подскажите...
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716802
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlex,

cascade delete чего? центра при удалении адреса?
А как у вас связано View, ID и Attach ?
...
Рейтинг: 0 / 0
Обновление сложной модели
    #38716803
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlex,

насчет каскадного удаления могу уже путать, давно не пользовал CodeFirst. Разве не так:
modelBuilder.Entity<Address>().HasMany(x => x.Centers).WithRequired(x => x.Address).WillCascadeOnDelete();
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Обновление сложной модели
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]