首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EntityFramework试图创建指向同一表的多个链接,FK约束错误

EntityFramework试图创建指向同一表的多个链接,FK约束错误
EN

Stack Overflow用户
提问于 2019-03-13 06:33:35
回答 1查看 42关注 0票数 1

我有一个名为DeliveryRequest的表和另一个名为Operator的表,表DeliveryRequest如下所示:

代码语言:javascript
运行
复制
public class DeliveryRequest
{
    public int ID { get; set; }
    public DateTime Date { get; set; }
    public string UserID { get; set; }
    public string Waybill { get; set; }
    public string Reference { get; set; }
    public int SupplierID { get; set; }
    public Supplier Supplier { get; set; }
    //[ForeignKey("Operator")]
    public int SenderID { get; set; }
    public Operator Sender { get; set; }
    //[ForeignKey("Operator")]
    public int ReceiverID { get; set; }
    public Operator Receiver { get; set; }
    public string Origin { get; set; }
    public string Destination { get; set; }
    public int ServiceID { get; set; }
    public Service Service { get; set; }
}

表运算符如下:

代码语言:javascript
运行
复制
public class Operator
{
    public int ID { get; set; }
    public string Company { get; set; }
    public int ContactID { get; set; }
    public Contact Contact { get; set; }
    public int AddressID { get; set; }
    public Address Address { get; set; }
}

所以问题是,当我试图更新我的数据库时,我得到一个FK约束错误,如下所示:

在表'DeliveryRequests‘上引入外键约束DeliveryRequests可能会导致循环或多个级联路径。指定“删除不操作”或“更新不操作”,或修改其他外键约束。无法创建约束或索引。请参阅先前的错误。

之前的错误是一样的。详情如下:

'FK_dbo.DeliveryRequests_dbo.Operators_SenderID‘(0x80131904):在表'DeliveryRequests’上引入外键约束DeliveryRequests可能会导致循环或多个级联路径。指定“删除不操作”或“更新不操作”,或修改其他外键约束。

专注于发件人和接受者部分,我不是专家,但错误必须存在。

代码语言:javascript
运行
复制
//[ForeignKey("Operator")]
public int SenderID { get; set; }
public Operator Sender { get; set; }
//[ForeignKey("Operator")]
public int ReceiverID { get; set; }
public Operator Receiver { get; set; }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-13 06:59:34

看起来您正在使用Code First方法。因此,请尝试关闭CascadeDelete for DeliveryRequests

代码语言:javascript
运行
复制
modelBuilder.Entity<DeliveryRequests>()
    .HasRequired(c => c.Operator )
    .WithMany()
    .WillCascadeOnDelete(false);

例如:

代码语言:javascript
运行
复制
public class YourDBContext: DbContext 
{
    public YourDBContext(): base() 
    {
    }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<DeliveryRequests>()
            .HasRequired(c => c.Operator )
            .WithMany()
            .WillCascadeOnDelete(false);    
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55135744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档