モデル設計でONDELETENO ACTION外部キー制約を指定するにはどうすればよいですか?
現在、私は持っています:
public class Status
{
[Required]
public int StatusId { get; set; }
[Required]
[DisplayName("Status")]
public string Name { get; set; }
}
public class Restuarant
{
public int RestaurantId { get; set; }
[Required]
public string Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
public string Telephone { get; set; }
[Required]
public int StatusId { get; set; }
public List<Menu> Menus { get; set; }
// NAVIGATION PROPERTIES
public virtual Status Status { get; set; }
}
public class Menu
{
public int MenuId { get; set; }
[Required]
public int RestaurantId { get; set; }
[Required]
public string Name { get; set; }
[Required]
public int StatusId { get; set; }
// NAVIGATION PROPERTIES
public virtual Status Status { get; set; }
public virtual Restaurant Restaurant { get; set; }
}
そして私のDbContext:
public class MenuEntities : DbContext
{
public DbSet<Status> Statuses { get; set; }
public DbSet<Restaurant> Restaurants { get; set; }
public DbSet<Menu> Menus { get; set; }
}
ご覧のように:
- レストランにはたくさんのメニューがあります
- レストランには1つのステータスがあります
- メニューは1つのレストランに属しています
- レストランとメニューの両方に1つのステータスがあります。(ライブ、インビジブル、ドラフト)
当然、ステータスが削除された場合、これはすべてを台無しにするので、私は確かにカスケードしたくありません。
アップデート:
Mark Oretaは、以下の例で次のように言及しています。
modelBuilder.Entity<FirstEntity>()
.HasMany(f => f.SecondEntities)
.WithOptional()
.WillCascadeOnDelete(false);
このコードはどこに置きますか?MenuEntities / DbContextクラス内ですか?誰かがこれが使用されている例を提供できますか?
更新: このビットが機能するようになりましたが、DBをシードしようとすると多重度制約エラーが発生しました...
Multiplicity constraint violated. The role 'Menu_Status_Source' of the relationship 'LaCascadaWebApi.Models.Menu_Status' has multiplicity 1 or 0..1.
私のデータベースイニシャライザー: