C#实体框架-初学者

本文关键字:初学者 框架 实体 | 更新日期: 2023-09-27 18:00:57

目前数据库关系如下:https://i.stack.imgur.com/uzvnp.png

我有一个名为friendship的连接器表,它包含2个值和一个密钥ID。这个表描述了X是Y的朋友,但Y可能不是X的朋友。所以它是某种线性的东西。

我想在实体框架中进行同样的建模,但我一直失败,因为我得到了这个错误:

可能导致循环或多个级联路径。

我在EF:做了两张桌子

class Friendship
{
    [Key]
    public int id { get; set; }
    public int whoid { get; set; }
    public int whomid { get; set; }
    [ForeignKey("whoid")]
    public virtual Person who { get; set; }
    [ForeignKey("whomid")]
    public virtual Person whom { get; set; }
}
class Person
{
    [Key]
    public int id { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string name { get; set;} 
    public string city { get; set; }
    public string street { get; set; }
    public string hnum { get; set; }
    public string bday { get; set; }
    [InverseProperty("who")]
    public virtual List<Friendship> wholist { get; set; }
    [InverseProperty("whom")]
    public virtual List<Friendship> whomlist { get; set; }
}

C#实体框架-初学者

我认为您需要按照以下方式编写代码,并添加正确的关系。

class Friendship
{
    [Key]
    public int id { get; set; }
    [ForeignKey("who")]
    public int whoid { get; set; }
    [ForeignKey("whom")]
    public int whomid { get; set; }

    public virtual Person who { get; set; }

    public virtual Person whom { get; set; }
}
class Person
{
    [Key]
    public int id { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string name { get; set;} 
    public string city { get; set; }
    public string street { get; set; }
    public string hnum { get; set; }
    public string bday { get; set; }
    [InverseProperty("who")]
    public virtual List<Friendship> wholist { get; set; }
    [InverseProperty("whom")]
    public virtual List<Friendship> whomlist { get; set; }
}

此外,您还需要为DB上下文文件中实体之间的关系添加以下代码。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Friendship>()
                    .HasRequired(e => e.who)
                    .WithMany(t => t.wholist)
                    .HasForeignKey(e => e.whoid)
                    .WillCascadeOnDelete(false);
        modelBuilder.Entity<Friendship>()
                    .HasRequired(e => e.whom)
                    .WithMany(t => t.whomlist)
                    .HasForeignKey(e => e.whomid)
                    .WillCascadeOnDelete(false);   


}

在Entityframework中,您不能添加多个相同class的外键,否则会出现错误。。删除这些。。。。

[ForeignKey("whoid")]
public virtual Person who { get; set; }
[ForeignKey("whomid")]
public virtual Person whom { get; set; }

我认为在sqlserver中添加时也会遇到这个问题