0

エンティティフレームワークで更新、挿入、削除を行う方法は知っていますが、この場合は何をすべきかわかりません。

この場合、私は3つのテーブルを持っています.テーブルA、テーブルB、および2つの列を持つテーブルAB、1つはテーブルAのフォアキー、もう1つはテーブルBのフォアキーです.

エンティティ フレームワークにはテーブル A と B しか表示されないので、テーブル AB の内容だけを更新するにはどうすればよいですか?

エンティティ A とエンティティ B で参照を使用しようとしましたが、エンティティ セット AB には挿入機能と削除機能がないという例外が表示されます。

4

4 に答える 4

0

あなたは

Public Virtual List<int> Ids

「A」クラスと「B」クラスで、すべての関連付けを回復します

于 2012-04-13T14:47:36.250 に答える
0

挿入の場合は、テーブル A のレコードを作成してから、テーブル B のレコードを、A に挿入するために作成されたアイテムに追加します。残りは EF が処理します。

 var tableA = new TableAtype { Description = "blah", etc.};
 tableA.TableBtype.Add(new TableBtype { Property1 = "foo", Property2 = "bar"};


 yourContext.AddToTableAtype(tableA);
 yourContext.SaveChanges();
于 2012-04-13T14:49:51.837 に答える
0

私は問題を解決しました。問題は、データベースに接続されていないオブジェクトを操作していたことでした。このように接続してみました

        foreach (DefAbilitazioni abilitazione in abilitazioni)
        {   
            entities.Attach(abilitazione);
            gruppo.DefAbilitazionis.Add(abilitazione);   
        }

しかし、それはエンティティキーがnullであると言っています。おそらく、誰かがアタッチの使用例を教えてくれたら、コードを変更してみてください。今はこのようになっています

    public void ModificaAbilitazioni(int IdGruppoAnagrafica, List<DefAbilitazioni> AbilitazioniList)
    {            
        GruppiAnag gruppo = (from g in entities.GruppiAnags
                             where g.IdGruppoAnag == IdGruppoAnagrafica
                             select g).First();

        IEnumerable<int> idAbilitazioni = from id in AbilitazioniList
                                          select id.IdAbilitazione;

        List<DefAbilitazioni> abilitazioni = (from abilitazione in entities.DefAbilitazionis
                                              where idAbilitazioni.Contains(abilitazione.IdAbilitazione)
                                              select abilitazione).ToList();

        gruppo.DefAbilitazionis.Clear();
        foreach (DefAbilitazioni abilitazione in abilitazioni)
        {   
            gruppo.DefAbilitazionis.Add(abilitazione);   
        }
        entities.SaveChanges();
    }      
于 2012-04-16T08:02:48.297 に答える
0

TheGeekYouNeed の質問に応じて、プロジェクトのコードを使用してより具体的に説明します

    public void ModificaAbilitazioni(int IdGruppoAnagrafica, List<DefAbilitazioni> AbilitazioniList)
    {            
        GruppiAnag gruppo = (from g in entities.GruppiAnags
                             where g.IdGruppoAnag == IdGruppoAnagrafica
                             select g).First();

        List<DefAbilitazioni> tutteAbilitazioni = GetTutteAbilitazioni();
        for (int i = 0; i < AbilitazioniList.Count; i++)
        {
            if (tutteAbilitazioni[i].GruppiAnags.Contains(gruppo))
            {
                tutteAbilitazioni[i].GruppiAnags.Remove(gruppo);
            }
        }

        foreach (DefAbilitazioni abilitazione in AbilitazioniList)
        {
            for (int i = 0; i < tutteAbilitazioni.Count; i++)
            {
                if (tutteAbilitazioni[i].IdAbilitazione == abilitazione.IdAbilitazione)
                {
                    tutteAbilitazioni[i].GruppiAnags.Add(gruppo);
                }
            }
        }
        entities.SaveChanges();
    } 

わかりました...ここにあります

このメソッドは、特権アカウントを変更する必要があります。

まず、彼の ID を使用してアカウントを回復します。すべての特権を回復し、参照でアカウントが回復された場合は、参照から削除します。この方法では、アカウントには権限がありません。今、私はメソッドを呼び出して渡した特権で、theri 参照で私はアカウントを入れました。(ただ拭いて補充するだけです。今のところ試しています...)

私は反対のこともしました。アカ​​ウントの特権参照を消去してそれらを補充しましたが、どちらの方法でも機能しません。最初のケースでは、3 番目のエンティティ (AB) には挿入機能がないと表示されます。

于 2012-04-15T14:52:12.760 に答える