19

Code-First DBContext ベースの EF5 セットアップを使用しています。

DBにDbMigrationsConfiguration.Seedデフォルトのダミーデータを入力しようとしています。このタスクを達成するために、DbSet.AddOrUpdateメソッドを使用します。

私の目的を説明する最も簡単なコード:

j = 0;

var cities = new[]
    {
        "Berlin",
        "Vienna",
        "London",
        "Bristol",
        "Rome",
        "Stockholm",
        "Oslo",
        "Helsinki",
        "Amsterdam",
        "Dublin"
    };
var cityObjects = new City[cities.Length];


foreach (string c in cities)
{
    int id = r.NextDouble() > 0.5 ? 0 : 1;
    var city = new City
        {
            Id = j,
            Name = c,
            Slug = c.ToLowerInvariant(),
            Region = regions[id],
            RegionId = regions[id].Id,
            Reviewed = true
        };
    context.CitySet.AddOrUpdate(cc => cc.Id, city);
    cityObjects[j] = city;
    j++;
}

Idフィールドを使用/省略し、 Id/Slugプロパティを更新セレクターとして使用しようとしました。

Update-Database実行されると、Idフィールドは無視され、値は SQL Server によって自動的に生成され、DB は重複で埋められます。Slugセレクターは重複を許可し、その後の実行で例外を生成します ( Sequence contains more than one element)。

メソッドはAddOrUpdateこのように動作することを意図していますか? アップサートを手動で実行する必要がありますか?

4

2 に答える 2