簡體   English   中英

EF 4.1一對多關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM