0

わかった。List を持つ State があります。Series の同じリストを使用する State の複数のインスタンスが必要です。

public class State
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Series> Serieses { get; set; }
}

public class Series
{
    public int Id { get; set; }
    public string Name { get; set; }
}

状態の名前を入力して状態を作成し、ListBox から 1 つ以上のシリーズを選択した後:

public ActionResult Create(State state, FormCollection form)
    {

      // method to get selected Series from db

      foreach (var sItem in seriesModel//List of Possible Series)
      {
          foreach (var item in Selections//User selected Series)
          {

             if (sItem.Name == item.Name)
             {
                newSeries.Add(sItem);
             }
          }
      }

      state.Serieses = newSeries;
      _db.Entry(state).State = EntityState.Modified;
      _db.SaveChanges();

問題は、List を使用して State のインスタンスを 1 つ作成した後です。2 番目のインスタンスを作成し、そのリストで同じシリーズを使用すると、最初のインスタンスはリストでそのシリーズを失います。したがって、明らかに Series は参照ではなく値で渡されます。私は C# は初めてですが、C++ ではポインターを使用していました。そうすれば、Series の元の値を変更すると、それを指す各 State リストに表示されます。データベースのテーブル データにも気付きました。すべてのシリーズに外部キー State_Id が追加されています。Code First メソッドを使用したときに作成されたテーブル定義を次に示します。

CREATE TABLE [dbo].[Series] (
[Id]       INT            IDENTITY (1, 1) NOT NULL,
[Name]     NVARCHAR (MAX) NULL,
[State_Id] INT            NULL,
CONSTRAINT [PK_dbo.Series] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_dbo.Series_dbo.States_State_Id] FOREIGN KEY ([State_Id]) REFERENCES [dbo].[States] ([Id])
4

5 に答える 5

0

ここで引用されているように、「refキーワードにより、引数は値ではなく参照によって渡されます。」

の宣言を変更できないため、これを使用する醜い方法は次のようになりますvalue

public MyClass {
    private string myString;

    public void SetMyString(ref string str) {
        myString = str
    }
}

私は本当にこれをお勧めしません。

于 2013-06-01T23:48:29.877 に答える
0

スタティックにしたらどうですか?

public static ICollection<Series> Serieses { get; set; }
于 2013-06-01T23:50:33.760 に答える
0

Code First で Entity Framework を使用するには、多対多の関係テーブルを生成するために、状態のコレクションをシリーズに追加する必要があります。

public class Series
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<State> States { get; set; } 
}

パッケージ マネージャー コンソールを使用して、コード ファーストのデータ移行も実行する必要があります。

Add-Migration <YourMigrationNameHere>

次にアプリを実行すると、次の DB 構造になります。

ここに画像の説明を入力

于 2013-06-07T15:12:52.340 に答える