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; }
}
我认为您需要按照以下方式编写代码,并添加正确的关系。
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中添加时也会遇到这个问题