gpt4 book ai didi

entity-framework - 我应该如何首先使用 EF 代码模拟用户之间的友谊?

转载 作者:行者123 更新时间:2023-12-05 01:14:43 24 4
gpt4 key购买 nike

我试图弄清楚如何使用 Entity Framework (5) Code First 来表示用户之间的友谊。我最初的想法是创建一个类 Friendship,其中包含对两个 User 实例的引用,以便友谊由单独的对象表示。

public class Friendship
{
public virtual int Id { get; set; }
[Required]
public virtual UserProfile User1 { get; set; }
[Required]
public virtual UserProfile User2 { get; set; }
[Required]
public virtual DateTime Since { get; set; }
}

[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
[Required]
public string UserName { get; set; }
}

但是,当尝试通过 EF 迁移创建数据库时,由于 SQL 错误,我很难过:
Introducing FOREIGN KEY constraint 'FK_dbo.Friendships_dbo.UserProfile_User2_UserId' on table 'Friendships' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

非常欢迎有关如何解决此问题的建议。

最佳答案

经过更多的谷歌搜索后,我设法在 SO 上找到了一个类似的问题,那里有一个解决方案,至少可以毫无问题地将其放入数据库。

基本上,我将每个用户的外键添加到 Friendship类,使它们成为复合主键并配置第二个外键在删除时不级联。我最终使用了 EF fluent 配置。

public class Friendship
{
public virtual int UserId1 { get; set; }
public virtual int UserId2 { get; set; }
public virtual User User1 { get; set; }
public virtual User User2 { get; set; }
public DateTime since;
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
modelBuilder.Entity<Friendship>().HasKey(f => new { f.UserId1, f.UserId2 });
modelBuilder.Entity<Friendship>()
.HasRequired(f => f.User1)
.WithMany()
.HasForeignKey(f => f.UserId1);
modelBuilder.Entity<Friendship>()
.HasRequired(f => f.User2)
.WithMany()
.HasForeignKey(f => f.UserId2)
.WillCascadeOnDelete(false);
}

关于entity-framework - 我应该如何首先使用 EF 代码模拟用户之间的友谊?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896503/

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