views:

235

answers:

1

Hi!

I have created a partial class of an entity for getting a foreign key property on it.

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);

        }
    }
}

Now I change the foreign key (property) but nothing happens?!

What do I have to do to update a foreign key for an entity?

I use EF 3.5 SP1 in ASP.NET MVC 2

EDIT

id = ArtikelID updatedArtikel = Artikel properties ArtikelWarengruppen = selected DropDownList value

[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();
    }
}
A: 

I've solved the problem.

[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();
    }
}

But is there a better way?

Rookian