我正在使用EF Core CodeFirst生成数据库
这是我的Entity类:
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public string Lastname { get; set; }
public string MotherSurname { get; set; }
public string PhoneNumber { get; set; }
public string Email { get; set; }
public virtual List<Friend> FriendsWith { get; set; }
public virtual List<Friend> FriendsOf { get; set; }
public virtual List<Post> Posts { get; set; }
public virtual List<Chat> SentMessages { get; set; }
public virtual List<Chat> RecievedMessages { get; set; }
}
public class Chat
{
public int ChatId { get; set; }
public User SenderUser { get; set; }
public int SenderUserId { get; set; }
public Message Message { get; set; }
public int MessageId { get; set; }
public User TargetUser { get; set; }
public int TargetUserId { get; set; }
}
public class Message
{
public int MessageId { get; set; }
public string MessageToSend { get; set; }
public Chat Chat { get; set; }
}
public class Friend
{
public int FriendId { get; set; }
public User User { get; set; }
public int UserId { get; set; }
public User FriendUser { get; set; }
public int FriendUserId { get; set; }
public bool Isaccepted { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public User User{ get; set; }
public int UserId { get; set; }
}
还有我构建的上下文:
public class SocialNetworkContext: DbContext
{
public SocialNetworkContext(DbContextOptions<SocialNetworkContext> options)
: base(options)
{
}
protected override void Onconfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=BOT-JGONZALEZA;Database=SocialNetworkDB;Trusted_Connection=True;");
}
protected override void OnmodelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Friend>().HasOne(f => f.User).WithMany(u => u.FriendsWith).HasForeignKey(f => f.UserId).OnDelete(DeleteBehavior.Noaction);
modelBuilder.Entity<Friend>().HasOne(f => f.FriendUser).WithMany(u => u.FriendsOf).HasForeignKey(f => f.FriendUserId).OnDelete(DeleteBehavior.Noaction);
modelBuilder.Entity<Post>().HasOne(p => p.User).WithMany(u => u.Posts).HasForeignKey(p => p.UserId);
modelBuilder.Entity<Chat>().HasOne(c => c.SenderUser).WithMany(u => u.SentMessages).HasForeignKey(c => c.SenderUserId).OnDelete(DeleteBehavior.Noaction);
modelBuilder.Entity<Chat>().HasOne(c => c.TargetUser).WithMany(u => u.RecievedMessages).HasForeignKey(c => c.TargetUserId).OnDelete(DeleteBehavior.Noaction);
modelBuilder.Entity<Message>().HasOne(m => m.Chat).WithOne(c => c.Message).HasForeignKey<Chat>(c => c.MessageId);
}
public DbSet<User> Users { get; set; }
public DbSet<Post> Posts { get; set; }
public DbSet<Message> Messages { get; set; }
public DbSet<Chat> Chats { get; set; }
public DbSet<Friend> Friends { get; set; }
}
当我尝试update-database
时,会不断出现以下错误:
错误号:1785,状态:0,类:16 在表“聊天”中引入外键约束“ FK_Chats_Users_TargetUserId”可能会导致循环或多个级联路径。指定ON DELETE NO actION或ON UPDATE NO actION,或修改其他FOREIGN KEY约束。 无法创建约束或索引。查看先前的错误。