我首先使用带有 ASP.NET MVC3 代码的实体框架。
我有一个这样的项目实体和徽标:
public class Project
{
[Key]
public int ProjectID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual Logo Logo { get; set; }
}
public class Logo
{
[Key]
public int LogoID { get; set; }
public string LogoName { get; set; }
public byte[] LogoContent { get; set; }
public string LogoContentType { get; set; }
}
每个项目可以附加 0 或 1 个徽标。
创建我的数据库(sql server)时,我看到在表 Project 中创建了一个字段用于引用徽标。
每当我的 Project 表中有一个项目引用徽标时,我都会在 Logo_LogoID 中填充徽标表中的相应键。没关系对我来说。对我来说似乎很奇怪的是,当我删除徽标时,sql server 向我显示以下错误:
因此,为了能够从我的 Logo 表中删除徽标,我需要首先从 Project 表中断开引用(通过将 LogoID 替换为 NULL),然后从 Logo 中删除该行。
也许有更好的方式来引用事物?
这似乎是一个愚蠢的问题。
我认为更好的解决方案是具有反向关系:在 Logo 表中添加 ProjectID 字段。所以每当我需要删除一个标志时,我都可以轻松地删除这个标志。
你怎么看?
谢谢。
编辑
就像 Mark Oreta 建议的那样,我尝试过:
modelBuilder.Entity<Project>()
.HasOptional(p => p.Logo)
.WithOptionalPrincipal();
但我得到了对 ProjectID 的双重引用:
知道为什么吗?