【问题标题】:Code First Many-Many Error (may cause cycles or multiple cascade paths)Code First Many-Many Error(可能导致循环或多个级联路径)
【发布时间】:2013-05-15 20:03:23
【问题描述】:

我查看了很多问题并尝试了所有可用的解决方案,但它似乎不适用于我的具体情况。我正在尝试为以下类添加代码优先的多对多关系并收到以下错误:

引入 FOREIGN KEY 约束 表上的“FK_dbo.AgentPoolAgents_dbo.Agents_Agent_Id” 'AgentPoolAgents' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN 关键约束。无法创建约束。查看以前的错误。

代理

    public class Agent
{
    public virtual int Id { get; set; }
    public virtual string AgentName { get; set; }
    public virtual int UserId { get; set; }
    public virtual bool Available { get; set; }
    public virtual DateTime CreatedTime { get; set; }     
    public virtual ICollection<AgentPool> AgentPools { get; set; }

    public Agent()
    {
    }
}

代理池

    public class AgentPool
{
    public virtual int Id { get; set; }
    [Required]
    [Display(Name = "Agent pool name")]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)]
    public virtual string PoolName { get; set; }
    public virtual int UserId { get; set; }
    public virtual DateTime CreatedTime { get; set; }
    public virtual DateTime ModifiedTime { get; set; }
    public virtual ICollection<Agent> Agents { get; set; }

    public AgentPool()
    {
    }
}

UserId 是 UserProfile 类的外键,用于标识代理和代理池的所有者。 使用 update-database 包管理器控制台命令运行迁移时出现错误。

非常感谢任何帮助!

【问题讨论】:

  • 我刚刚粘贴了您的代码并进行了迁移。一切正常,您的模型上可能有更多实体与代理交互,这就是创建循环引用的原因

标签: asp.net-mvc entity-framework ef-code-first many-to-many


【解决方案1】:

您不需要每个字段都是虚拟的。不知道你想通过这样做来实现什么。使用 'virtual' 关键字预加载导航属性,例如保持 ICollection 代理虚拟化。

在回答您的问题时,请查看:this question

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 2015-04-26
    • 2016-03-26
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2020-06-14
    • 2018-12-19
    相关资源
    最近更新 更多