Обновите внешний ключ в Entity Framework - PullRequest
0 голосов
/ 19 января 2010

Я создал частичный класс сущности для получения свойства внешнего ключа.

public partial class Artikel
{
    public int WarengruppenID
    {
        get
        {
            if (WarengruppeReference.EntityKey == null) return 0;
            return (int)WarengruppeReference.EntityKey.EntityKeyValues[0].Value;
        }
        set
        {
            WarengruppeReference.EntityKey =
                new EntityKey("ConsumerProtectionEntities.Warengruppe", "WarengruppenID", value);

        }
    }
}

Теперь я изменяю внешний ключ (свойство), но ничего не происходит?!

Что мне нужно сделать, чтобы обновить внешний ключ для сущности?

Я использую EF 3.5 SP1 в ASP.NET MVC 2

EDIT

id = ArtikelID updatedArtikel = свойства Artikel ArtikelWarengruppen = выбранное значение DropDownList

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, Artikel updatedArtikel, string ArtikelWarengruppen)
{
    try
    {
        int artikelWarengruppenID = int.Parse(ArtikelWarengruppen);

        var originalArtikel = (from art in _db.Artikel.Include(typeof(Warengruppe).Name)
                               where art.ArtikelID == id
                               select art).FirstOrDefault();

        _db.Attach(originalArtikel);

        updatedArtikel.ArtikelID = id;

        // Update FK
        updatedArtikel.WarengruppenID = artikelWarengruppenID;

        _db.ApplyPropertyChanges(typeof(Artikel).Name, updatedArtikel);

        _db.SaveChanges();

        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

Ответы [ 2 ]

1 голос
/ 20 января 2010

Я решил проблему.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, Artikel updatedArtikel, string ArtikelWarengruppen)
{
    try
    {
        // update foreign key
        int artikelWarengruppenID = int.Parse(ArtikelWarengruppen);

        var originalArtikel = (from art in _db.Artikel.Include(typeof(Warengruppe).Name)
                               where art.ArtikelID == id
                               select art).FirstOrDefault();

        originalArtikel.WarengruppenID = artikelWarengruppenID;

        _db.Attach(originalArtikel);

        // update properties
        updatedArtikel.ArtikelID = id;

        _db.ApplyPropertyChanges(typeof(Artikel).Name, updatedArtikel);

        _db.SaveChanges();

        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

Но есть ли лучший способ?

0 голосов
/ 23 января 2015

Это должен быть оптимальный способ достичь желаемого:

int artikelWarengruppenID = int.Parse(ArtikelWarengruppen);
updatedArtikel.WarengruppenID = artikelWarengruppenID;
updatedArtikel.ArtikelID = id;

_db.Entry(updatedArtikel).State = EntityState.Modified;
_db.SaveChanges();

Предполагается, что ваша опубликованная Artikel содержит все данные, которые вы хотите сохранить в сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...