好的。我有有列表的状态。我想拥有多个使用相同系列列表的 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; }
}
通过键入状态名称并从列表框中选择 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 实例之后。如果我创建第二个实例并在其列表中使用相同的系列,则第一个实例将在其列表中丢失该系列。所以很明显 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])