わかった。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])