如何在我的模型設計中指定ON DELETE NO ACTION外鍵約束?在ASP.NET MVC 4中指定ON DELETE NO 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; }
}
正如你可以看到:
- 餐廳有很多菜單
- 餐廳有一種狀態
- a菜單屬於1餐廳
- 餐廳和菜單都有1個狀態。 (Live,Invisible,Draft)
當然,如果一個狀態被刪除,我當然不想級聯,因爲這會弄糟一切。
UPDATE:
馬克Oreta提到使用下他的例子如下:
modelBuilder.Entity<FirstEntity>()
.HasMany(f => f.SecondEntities)
.WithOptional()
.WillCascadeOnDelete(false);
我在哪裏可以把這個代碼?在我的MenuEntities/DbContext類中? 任何人都可以提供這個被使用的例子嗎?
UPDATE: 得到這個有點現在的工作,但是這已經創造試圖播種DB時的多重約束錯誤......
Multiplicity constraint violated. The role 'Menu_Status_Source' of the relationship 'LaCascadaWebApi.Models.Menu_Status' has multiplicity 1 or 0..1.
我的數據庫初始化器:
哪裏OnModelCreating方法?我怎麼找到它? – Gravy
更新了我的答案 - 但你會把它放在你的MenuEntities類中,你不需要同時刪除約定和流利的映射(選擇其中一個或另一個),但是我把它們都放到了你的頭上會使用它們。 –
感謝馬克,已更新,但仍然存在問題...查看有問題的更新 – Gravy