[英]EF 4.1 One to Many relationship
我有一個非常簡單的數據模型,而且我在使用EF 4.1 CF時遇到了很多困難。
我的數據模型有兩個類:
public class Site {
public int id { get; set; }
public string name { get; set; }
public ICollection<Building> buildings { get; set; }
}
public class Building {
public int id { get; set; }
public int siteId { get; set; }
public string name { get; set; }
}
我的配置文件是這樣的:
public class SiteConfiguration : EntityTypeConfiguration<Site> {
public SiteConfiguration() {
HasMany(c => c.buildings)
.WithRequired()
.HasForeignKey(c => c.siteId);
}
}
在我的MVC控制器中,我只想從一個站點中刪除一個建築物。 這是我的控制器代碼:
public ActionResult Delete(int id, int siteId) {
var site = repo.GetById(siteId);
var building = site.buildings.SingleOrDefault(c => c.id == id);
ou.buildings.Remove(site);
repo.Save();
}
我的錯誤信息:
操作失敗:無法更改關系,因為一個或多個外鍵屬性不可為空。 當對關系進行更改時,相關的外鍵屬性將設置為空值。 如果外鍵不支持空值,則必須定義新關系,必須為外鍵屬性分配另一個非空值,或者必須刪除不相關的對象。 任何想法或建議將不勝感激。
嘗試這個:
public class Building
{
public int id { get; set; }
public Site Site { get; set; }
...
}
public class SiteConfiguration : EntityTypeConfiguration<Site>
{
public SiteConfiguration()
{
HasMany(c => c.buildings);
}
}
public BuildingConfiguration : EntityTypeConfiguration<Building>
{
public BuildingConfiguration()
{
HasRequired(s=>s.Site);
}
}
這告訴站點它可以有許多建築物,並告訴建築物它需要一個站點,並且不會讓站點擔心建立需求,反之亦然。
據我所知,你只在許多關系等中引入HasMany.WithMany / WithRequired。
您可以嘗試替換此行:
public int siteId { get; set; }
有了這個:
public Site site { get; set; }
有兩種方法可以描述與類名或id的關系。 你把這兩者結合起來就是這個原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.