防止实体框架将外键设置为NULL

NoPyGod

我们的数据库有三个实体:PersonCompanyPhoneCall

Person描述一个人。Company描述一家公司。PhoneCall描述与Person通话的详细信息Company

public class Person
{
    public int Id { get; set;}
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
}

public class Company
{
    public int Id { get; set;}
    public string Name { get; set; }
    public string VatNumber { get; set; }
}

public class PhoneCall
{
    public int Id { get; set;}
    public string Description { get; set;}
    public int Duration { get; set;}

    public int? PersonId { get; set; }
    public Person Person { get; set; }

    public int? CompanyId { get; set; }
    public Company Company { get; set; }

}

删除Person时,我发现Entity Framework出现某些不良行为Company

如果删除Person,则实体框架将更新所有关联的PhoneCall条目并将其设置PersonId为NULL。

dbContext.Entry(person).State = EntityState.Deleted;
dbContext.SaveChanges();

我不希望实体框架PersonId在所有关联的PhoneCall条目上都设置为null ,而是希望实体框架抛出某种异常,以使我知道Person不能删除该对象,因为有相关实体引用了Person

问题似乎在于实体框架不尊重PhoneCall.PersonIdPhoneCall.CompanyId外键,因为它们(都必须)都可以为空。

我显然可以在删除之前执行自己的检查,如下所示:

if (phoneCallDbSet.Where(ph => ph.Person == personToDelete).Any())
    throw new InvalidOperationException("Cannot delete person with associated calls");

...但是我的偏好是设置某种限制,以防止Entity Framework首先将外键设置为NULL,这样,如果开发人员忘记执行此检查,我们就不会得到最终的结果。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。表中的条目PhoneCall链接为空。

这可能吗?

贾廷·纳特·普鲁斯蒂(Jatin Nath Prusty)

不!!如果不对代码进行显式检查,就无法实现所需的功能。

如果将属性设置为可为空,则告诉框架,如果需要,您可以将其设置为null。那么为什么将其设置为null时会显示任何错误呢?

您可以使该属性不可为空,或者在代码中进行显式检查以对其进行处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

防止实体框架将外键设置为NULL

来自分类Dev

将外键设置为可空之后,实体框架代码首先无法更新数据库

来自分类Dev

实体框架将主键定义为另一个实体的外键

来自分类Dev

实体框架-未设置外键(0 / null),但导航属性不为null

来自分类Dev

实体框架的外键

来自分类Dev

在实体框架中将多个外键设置为主键

来自分类Dev

带外键的实体框架选择为空?

来自分类Dev

实体框架-外键约束

来自分类Dev

Tastypie外键设置为null

来自分类Dev

实体框架6.1.3将外键映射到非主键

来自分类Dev

在实体框架中将外键值设置回Null

来自分类Dev

实体框架外键插入重复键

来自分类Dev

防止两个外键同时为NULL

来自分类Dev

将 Doctrine 实体值设置为 NULL?

来自分类Dev

实体框架将条目设置为修改引发错误

来自分类Dev

将集合设置为修改后的实体框架

来自分类Dev

实体框架外键错误与插入

来自分类Dev

实体框架使用HasOptional加载外键

来自分类Dev

实体框架映射。多个外键

来自分类Dev

实体框架6.1.2中的外键

来自分类Dev

代码优先实体框架和外键

来自分类Dev

实体框架中的两列外键

来自分类Dev

实体框架6添加外键

来自分类Dev

实体框架自动外键填充

来自分类Dev

实体框架不会更新外键对象

来自分类Dev

C#实体框架中的外键

来自分类Dev

如何验证IList外键?实体框架

来自分类Dev

实体框架核心外键默认约定

来自分类Dev

实体框架-代码优先-外键约束