gpt4 book ai didi

c# - 没有外键或流畅的 api 版本的导航属性?

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:46 25 4
gpt4 key购买 nike

我有一个用户表,其中一个用户可以是另一个用户的管理员(这是可选的,因此 int?IdManager)

[Table("users")]
public partial class User
{
#region Properties
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
[Required]
[Column("Id")]
public int Id { get; set; }
#endregion

#region DataNavigation
/// <summary>
/// Navigation Id for getting parent Field
/// WARNING: this works, but need to remove foreign key creation in migration file !
/// </summary>
[ForeignKey("Manager")]
[Column("IdManager")]
public int? IdManager { get; set; }

/// <summary>
/// Navigation object to parent Field
/// </summary>
[ScriptIgnore]
[JsonIgnore]
[IgnoreDataMember]
public virtual User Manager { get; set; }
#endregion
}

现在在代码优先中,上面的代码生成了这个

public partial class manager : DbMigration
{
public override void Up()
{
AddColumn("users", "IdManager", c => c.Int());
CreateIndex("users", "IdManager");
AddForeignKey("users", "IdManager", "users", "Id");
}

public override void Down()
{
DropForeignKey("users", "IdManager", "users");
DropIndex("users", new[] { "IdManager" });
DropColumn("users", "IdManager");
}
}

然而,它在使用 Cannot add foreign key constraint 更新数据库时中断了

但是如果我删除外键创建

public partial class manager : DbMigration
{
public override void Up()
{
AddColumn("users", "IdManager", c => c.Int());
CreateIndex("users", "IdManager");
}

public override void Down()
{
DropIndex("users", new[] { "IdManager" });
DropColumn("users", "IdManager");
}
}

在 dbContext 和 Linq 中一切正常

...但是,我必须将 [ForeignKey("Manager")] 留在我的用户对象上(对于 linq 和 dbcontext),这不太好,因为稍后它肯定会再次在某人的脸上爆炸。

关于如何通过数据属性或流畅的 api 正确映射它有什么想法吗?

谢谢!

最佳答案

我没有测试过,但是在fluent api中应该是这样的:

modelBuilder.Entity<User>()
.HasOptional(u=>u.Manager)
.WithMany()
.HasForeignKey(u=>u.IdManager)
.WillCascadeOnDelete(false);

因此,用户有一个可选的管理器,它可以有许多用户链接到它,而管理器没有用户集合(WithMany 没有参数),具有给定的外键属性 (IdManager) 并禁用级联删除。

关于c# - 没有外键或流畅的 api 版本的导航属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33583821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com