1

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

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

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

4

1 回答 1

1

如果你想要一个多对多的关系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 将假定关系是一对多的,从而导致 s 表中的外CameraFeature

于 2013-08-10T17:22:39.723 回答