我认为这是一个非常简单的数据模型,而且我在使用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();
}
我的错误讯息:
操作失败:关系 无法更改,因为一个或 更多的外键属性是 非空的。当进行更改时 关系,相关 foreign-key属性设置为null 值。如果外键没有 支持null值,一个新的 关系必须定义, 必须分配外键属性 另一个非空值,或者 必须删除不相关的对象。任何 会有什么想法或建议 非常感谢。
答案 0 :(得分:1)
试试这个:
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。
答案 1 :(得分:0)
您可以尝试替换此行:
public int siteId { get; set; }
有了这个:
public Site site { get; set; }
有两种方法可以描述与类名或id的关系。你把两者结合起来就是这个原因。