Привет!
Использую 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е, даже если есть в базе.
спасибо!