0

我正在努力将属性更改(实际上添加)到我的数据库中已经存在的对象。

在我的数据库中,我有Scenario对象,每个Scenario对象都与(一个或多个)SceneWriter对象链接。SceneWriter现在我想Scenario用给定的ScenarioID.

这是我尝试这样做的方法:

string filmID = comboBox1.SelectedValue.ToString();
        Scenario newScenario = new Scenario();
        foreach (Scenario scenario in scenarioes)
        {
            string thisID = scenario.filmID.ToString();
            if (thisID.Equals(filmID))
            {
                try
                {
                    // remove old scenario from DB
                    myDatabase.Scenario.Remove(scenario);
                    myDatabase.SaveChanges();


                    // add new scenario to DB, which now contains new scenewriter
                    newScenario = scenario;
                    scenario.SceneWriter.Add(newScenewriter); // this newScenewriter I fetched before
                    myDatabase.Scenario.Add(newScenario);
                    myDatabase.SaveChanges();
                }
                catch (Exception ec)
                {
                    MessageBox.Show(ec.ToString());
                }
            }
        }

但是,当我尝试从中删除此Scenario记录时,它给了我一个错误myDatabase,因为它与其他一些表链接。

所以我需要的是不删除任何记录,而是更改它(只需添加这个SceneWriter),最好是在里面myDatabase

4

2 回答 2

2

您可以只更新对象

string filmID = comboBox1.SelectedValue.ToString();
Scenario newScenario = new Scenario();
foreach (Scenario scenario in myDatabase.Scenario
    .Where(scn => scn.filmID.ToString().Equals(filmId))
{
    scenario.SceneWriter.Add(newScenewriter);before
}

myDatabase.SaveChanges();
于 2013-04-16T17:35:49.990 回答
1

刚刚删除了删除场景的代码并重新添加它。这绝对是多余的过程。

    string filmID = comboBox1.SelectedValue.ToString();
    Scenario newScenario = new Scenario();
    foreach (Scenario scenario in scenarioes)
    {
        string thisID = scenario.filmID.ToString();
        if (thisID.Equals(filmID))
        {
            try
            {
                scenario.SceneWriter.Add(newScenewriter);
                myDatabase.SaveChanges();
            }
            catch (Exception ec)
            {
                MessageBox.Show(ec.ToString());
            }
        }
    }
于 2013-04-16T17:39:25.557 回答