我有一个像这样的类的模型
public class Feature
{
public int ID { get; set; }
public string Desc { get; set; }
}
和这样的一个:
public class Camera
{
public int ID { get; set; }
public string ModelName { get; set; }
public List<Feature> Features { get; set; }
}
在Seed()方法中我做了类似这样的事情:
context.Features.AddOrUpdate
(
f => f.Desc,
new Feature { Desc = "PTZ" },
new Feature { Desc = "AutoFocus" },
new Feature { Desc = "AutoIris" },
new Feature { Desc = "PoE" }
);
context.Cameras.AddOrUpdate
(
c => c.Name,
new Camera
{
ModelName = "P3301",
Features = new System.Collections.Generic.List<Feature>()
{
context.Features.Where(f => f.Desc.Contains("PTZ")).First()
}
}
);
context.Cameras.AddOrUpdate
(
c => c.Name,
new Camera
{
ModelName = "P3301p",
Features = new System.Collections.Generic.List<Feature>()
{
context.Features.Where(f => f.Desc.Contains("PoE")).First(),
context.Features.Where(f => f.Desc.Contains("PTZ")).First()
}
}
);
运行update-database后,我会看到Features和Cameras表中的记录,但Features表有一个新的Camera_ID字段,其中包含一个Camera ID。我期待一个Feature_Camera表或某些东西,以便一个功能可以与许多不同的凸轮交叉。
我在这里缺少什么?我怎么说相机可以有一系列非独特的功能呢?
答案 0 :(得分:2)
如果您希望Camera
和Feature
之间建立多对多关系,请将收藏集添加到Feature
...
public List<Camera> Cameras { get; set; }
...或定义与Fluent API的关系:
modelBuilder.Entity<Camera>()
.HasMany(c => c.Features)
.WithMany()
.Map(m =>
{
m.ToTable("CameraFeatures"); // name of the link table
m.MapLeftKey("CameraID");
m.MapRightKey("FeatureID");
});
如果您不执行其中一项更改,EF将假定该关系是一对多,从而导致Camera
表中Feature
的外键。