Entity framework ctp UPDATE
От: Аноним  
Дата: 02.11.10 22:00
Оценка: 2 (1)
Привет!
Использую EntityFramework ctp 4.
Есть POCO Client и City со связью один-ко-многим


public class Client:INotifyPropertyChanged
{
public int ClientId{get;set;}
public String FirstName{get;set;}
public String LastName{get;set;}
public City City{get;set;}
}

public class City:INotifyPropertyChanged
{
public int CityId{get;set;}
public String Name{get;set;}
}


Создаю для них конфигурации
class ClientConfiguration : EntityConfiguration<Client>
    {
        public ClientConfiguration()
        {
            Property(c => c.ClientId).IsIdentity();
            MapSingleType(c => new
            {
                c.ClientId,               
                CityId = c.City.CityId,                
            }).ToTable("Clients");          
        }
    }
 class CityConfiguration: EntityConfiguration<City>
    {
        public CityConfiguration()
        {
            Property(c => c.CityId).IsIdentity();         
            MapSingleType(c => new
                                   {
                                       c.CityId,
                                       c.Name
                                   }).ToTable("Cities");
        }
    }      
}

Далее строю модель


            _modelBuilder = new ModelBuilder();
            _modelBuilder.Configurations.Add(new ClientConfiguration());
            _modelBuilder.Configurations.Add(new CityConfiguration());
            _dbModel = _modelBuilder.CreateModel();



Наследуюсь от ObjectContext

 public class MyContext : ObjectContext
    {
      ............... 
        private void Init()
        {            
            _cities = CreateObjectSet<City>(); 
            _clients = CreateObjectSet<Client>();                
        }

        private ObjectSet<City> _cities;
        public ObjectSet<City> Cities
        {
            get 
            { 
                return _cities; 
            }
        }


        private ObjectSet<Client> _clients;
        public ObjectSet<Client> Clients
        {
            get
            {
                return _clients;
            }
        }


Контекст создаю так

            var val = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
            _connection = new SqlConnection(val);
            _context = model.DbModel.CreateObjectContext<MyContext>(_connection);


Получаю список клиентов через байндинг в WPF форме меняю значения клиента и хочу обновить

 _context.Context.Clients.Attach(client);                
 _context.Context.ObjectStateManager.ChangeObjectState(client, EntityState.Modified);                
 _context.Context.SaveChanges();


Значения полей без связи (например FistName, LastName) обновляются нормально, но если установить city то не обновляется.
в чем ошибка?
P.S. Сейчас посмотрел City вообще не выставляется в Clientе, даже если есть в базе.
спасибо!
Re: Entity framework ctp UPDATE
От: Аноним  
Дата: 03.11.10 11:56
Оценка:
А>Значения полей без связи (например FistName, LastName) обновляются нормально, но если установить city то не обновляется.
А>в чем ошибка?
А>P.S. Сейчас посмотрел City вообще не выставляется в Clientе, даже если есть в базе.
А>спасибо!

City нужно тоже атачить или добавлять к контексту
Re[2]: Entity framework ctp UPDATE
От: Аноним  
Дата: 03.11.10 12:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>City нужно тоже атачить или добавлять к контексту


Пробовал. Не помогает. Проблема не в этом, как мне кажется. Наверное не правильно установлены связи, потому что, как уже написал, при выборе из базы City не заполняется
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.