Entity Framework 1.0 выпуск - PullRequest
       4

Entity Framework 1.0 выпуск

0 голосов
/ 30 августа 2010

Проблема в том, что когда я использую приведенный ниже код для назначения значений местоположения, полученных из ListBox, создаваемому / редактируемому подразделению, EF создает новое местоположение, а затем вводит этот идентификатор местоположения и подразделения, таким образом, в таблицу DivisionLocation создание нескольких мест без необходимости, как показано ниже.

using (FRLEntities context = new FRLEntities())
{
    for (int i = 0; i < lstPicked.Items.Count; i++)
    {
        var lpn = cm.GetLocation(Convert.ToInt32(lstPicked.Items[i].Value));
        Location cLocation = new Location { LocationId = Convert.ToInt32(lstPicked.Items[i].Value), LocationName = lstPicked.Items[i].Text, LocationParentName = lpn.LocationParentName };
        //CurrentDivision.Location = new EntityCollection<Location>();
        CurrentDivision.Location.Add(cLocation);
    }
}

Некоторые данные

Division
Divisionid           DevisionName
1                    1st Division
2                    2st Division

Location
LocationId           LocationName
1                    HG
2                    FG
3                    IK
4                    HG
5                    FG  

DivisionLocation
DivisionId           LocationId
1                    1
1                    3
2                    1
2                    2
2                    4
1                    5

Заранее спасибо

1 Ответ

1 голос
/ 30 августа 2010

Это общая проблема. Вы создали экземпляр Location в коде и не загружали его из контекста EF. Таким образом, intance Location не связан с текущим контекстом, и когда вы добавляете новое CurrentDivision в контекст, все связанные Locations также принимаются как новые объекты.

Если вы хотите избежать этого, вы должны как-то сказать EF context, какие местоположения являются новыми, а какие существуют. Я использую этот подход:

context.ObjectStateManager.ChangeObjectState(lpn, EntityState.Unchagned);
...