相关疑难解决方法(0)

使用共享主键关联时,首先在EF 4.1代码中删除级联删除规则

我基于这个答案实现了双向1:1关系:

实体框架中的主/外键

我这样定义双向关系:

public class Student
{   
    public virtual int StudentId { get; set; }
    public virtual Anamnesis Anamnesis { get; set; }

    . . .
}

public class Anamnesis
{
    [Key, ForeignKey("Student")]
    public int AnamnesisId { get; set; }

    public virtual Student Student { get; set; }

    . . .
}
Run Code Online (Sandbox Code Playgroud)

其中,学生是主要实体,Anamnesis是共享PK的实体.

现在我想创建的关系有一个Delete Rule = CASCADE.实际上,正在创建的关系具有Delete Rule = NO ACTION,如下图所示:

在此输入图像描述

如果我在"表格属性"窗口中手动删除此关系并使用"删除规则"="CASCADE"添加其他关系,则代码将按照我的预期允许我删除学生并且它具有相同ID的共享Anamnesis.

所以,这是我的问题:

有没有办法在我的类中使用Data Annotation(不是Fluent API),以便获得与CASCADE删除规则的关系?我更喜欢使用Data Annotation但是如果不可能的话,我会对使用它的一些Fluent API代码感到满意.

注意

我已经尝试了这篇文章中显示的Fluent API代码.它在我有双向属性的情况下不起作用.

cascade sql-server-ce cascading-deletes ef-code-first entity-framework-4.1

7
推荐指数
2
解决办法
1万
查看次数

每个ID删除许多记录 - MVC C#

我拥有的数据库的设置Company可以有很多Engineer,也可以有很多Territory.如果我应该从列表中删除公司,我需要做一个干净的退出,所以不要只删除公司表格中的公司表格.我必须确保所有记录都被删除.因此,没有子/相关记录成为孤儿数据.

如果我要从所有表中删除一条记录,我只想删除它FirstOrDefault,然后我可以使用

public void RemoveCompany(long companyId)
{
    using (var db = new BoilerServicingDbContext())
    {
        var ec = db.Engineers.FirstOrDefault(x => x.CompanyId == companyId);
        db.Engineers.Remove(ec);
        var tc = db.CompanyTerritories.FirstOrDefault(x => x.CompanyId == companyId);
        db.CompanyTerritories.Remove(tc);
        var p = db.Companies.FirstOrDefault(x => x.Id ==  companyId);
        db.Companies.Remove(p);
        db.SaveChanges();       
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,每个公司有多个工程师,每个公司有一个以上的领土.是否有一个简单的方法,如一般的数据库意义.

DELETE * FROM Engineers WHERE companyId = 1;
Run Code Online (Sandbox Code Playgroud)

此刻我没有Cascading删除设置,所以除此之外.任何其他选择.

c# model-view-controller asp.net-mvc entity-framework cascade

2
推荐指数
1
解决办法
2105
查看次数