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 テーブルには単一のカメラ ID を含む新しい Camera_ID フィールドがあります。私は Feature_Camera テーブルか何かを期待していたので、機能は多くの異なるカムと交差することができました.

ここで何が欠けていますか?カメラが固有ではない機能のコレクションを持つことができるとは、どのように言えばよいでしょうか?

4

1 に答える 1

1

と の間の多対多の関係が必要な場合は、コレクションを...に追加しCameraます。FeatureFeature

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 は関係が 1 対多であると想定し、結果としてs テーブルCameraに外部キーが作成されます。Feature

于 2013-08-10T17:22:39.723 に答える