-2

私はEFを使用しています。

という名前のParentエンティティがありますMamConfiguration_V1

それはのEntityCollectionを持っていますMamConfigurationToBrowser_V1

私の文脈はmMaMDBEntitiesです。

MamConfigurationToBrowser_V1既存のものに新しいものを追加しようとしていますMamConfiguration_V1

エラーは発生しませんが、DB にレコードが追加されません。

既存の参照メンバーを更新すると、変更が DB に反映されます。

私は何を間違っていますか?

public MamConfiguration_V1 Save(MamConfiguration_V1 アイテム) {

        try
        {

            var itemFromDB = mMaMDBEntities.MamConfiguration_V1.SingleOrDefault(a=> a.ConfigurationId == item.ConfigurationId);

            if (itemFromDB != null)
            {

                UpdateEfBrowsers(itemFromDB, item);

                mMaMDBEntities.SaveChanges();

                return item;
            }
            else
            {
                throw new KeyNotFoundException(string.Format("configurationId = {0} wasn't found in the DB", item.ConfigurationId));
            }

    }

    private void UpdateEfBrowsers(MamConfiguration_V1 itemFromDb, MamConfiguration_V1 itemFromUi)
    {
        foreach (var item in itemFromDb.MamConfigurationToBrowser_V1.ToList())
        {
            if (itemFromUi.MamConfigurationToBrowser_V1.All(b => b.BrowserVersionId != item.BrowserVersionId))
            {
                mMaMDBEntities.MamConfigurationToBrowser_V1.DeleteObject(item);
            }
        }

        for (int i = 0; i < itemFromUi.MamConfigurationToBrowser_V1.Count; i++)
        {
            var element = itemFromUi.MamConfigurationToBrowser_V1.ElementAt(i);

            var item =
                itemFromDb.MamConfigurationToBrowser_V1.SingleOrDefault(b => b.BrowserVersionId == element.BrowserVersionId);

            if (item != null)
            {
                // copy properties from element to item
            }

                //add new
            else
            {
                //element.Browser = mMaMDBEntities.Browsers.Single(browserItem =>
                //                                                 browserItem.BrowserID == element.BrowserID);

                //element.MamConfigurationId = itemFromDb.ConfigurationId;

                element.MamConfiguration_V1 = null;

                mMaMDBEntities.MamConfigurationToBrowser_V1.AddObject(element);

                itemFromDb.MamConfigurationToBrowser_V1.Add(element);
            }
        }
    }
4

2 に答える 2

0
for (int i = 0; i < itemFromUi.MamConfigurationToBrowser_V1.Count; i++)
        {


...

                mMaMDBEntities.MamConfigurationToBrowser_V1.AddObject(element);

                itemFromDb.MamConfigurationToBrowser_V1.Add(element);
}

問題は、AddObjectまたはAdd

itemFromUi.MamConfigurationToBrowser_V1.Count から項目を削除します

したがって、カウントが減少します。

どうしてか分かりません。

私はforeach

于 2013-04-24T11:43:49.910 に答える
-1

あなたは書く必要があります

*databasename*.SaveChanges()

データベースに追加した後。そうしないと保存されません

于 2013-04-24T11:28:09.657 に答える