MVC4模型:使用列表<>作为财产

时间:2013-08-10 17:14:51

标签: entity-framework asp.net-mvc-4

我有一个像这样的类的模型

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表或某些东西,以便一个功能可以与许多不同的凸轮交叉。

我在这里缺少什么?我怎么说相机可以有一系列非独特的功能呢?

1 个答案:

答案 0 :(得分:2)

如果您希望CameraFeature之间建立多对多关系,请将收藏集添加到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的外键。