我正在使用SQL,并尝试使用Entity Framework Core进行添加迁移。我不确定如何解决此问题。它用于将审阅系统与用户和产品相关联。这在SQLite中有效。现在使用SQL Server。我已经尽量简短地提供所有信息。如果需要,我可以提供更多。以下是我的代码,有人可以帮忙吗?
在类“ Program”上访问IWebHost时发生错误。没有应用程序服务提供商就继续进行。错误:在表'ProductReviews'上引入FOREIGN KEY约束'FK_ProductReviews_AspNetUsers_ReviewerId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束或索引。查看以前的错误。
我尝试了注释掉的代码。
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<MemberReview>()
.HasKey(k => new { k.RevieweeId, k.ReviewerId });
builder.Entity<MemberReview>().
HasOne(u => u.Reviewer)
.WithMany(u => u.ReviewedMembers);
// .HasForeignKey(u => u.ReviewerId)
// .OnDelete(DeleteBehavior.Restrict);
builder.Entity<MemberReview>().
HasOne(u => u.Reviewee)
.WithMany(u => u.MemberReviews);
// .HasForeignKey(u => u.RevieweeId)
// .OnDelete(DeleteBehavior.Restrict);
builder.Entity<ProductReview>()
.HasKey(k => new { k.ReviewerId, k.ReviewedProductId });
builder.Entity<ProductReview>().
HasOne(u => u.ReviewedProduct)
.WithMany(u => u.ProductReviews);
//.HasForeignKey(u => u.ReviewedProductId)
//.OnDelete(DeleteBehavior.Restrict);
builder.Entity<ProductReview>().
HasOne(u => u.Reviewer)
.WithMany(u => u.ReviewedProducts);
//.HasForeignKey(u => u.ReviewerId)
//.OnDelete(DeleteBehavior.Restrict);
}
public class ProductReview
{
public Product ReviewedProduct { get; set; }
public User Reviewer { get; set; }
[Required]
public int ReviewerId { get; set; }
[Required]
[MaxLength(30)]
public string ReviewerUserName { get; set; }
[Required]
public int ReviewedProductId { get; set; }
[Required]
[MaxLength(35)]
public string Title { get; set; }
[Required]
[MaxLength(420)]
public string Review { get; set; }
[Required]
[MaxLength(2)]
public int Rating { get; set; }
}
public class User : IdentityUser<int>
{
[Required]
[MaxLength(12)]
public string UserType { get; set; }
[Required]
public DateTime DateOfEstablishment { get; set; }
[Required]
[MaxLength(75)]
public string KnownAs { get; set; }
public DateTime Created { get; set; }
public DateTime LastActive { get; set; }
[MaxLength(420)]
public string Description { get; set; }
public ICollection<Photo> Photos { get; set; }
public ICollection<Product> Products { get; set; }
// REVIEW THING
public ICollection<MemberReview> MemberReviews { get; set; }
public ICollection<MemberReview> ReviewedMembers { get; set; }
public ICollection<ProductReview> ReviewedProducts { get; set; }
// *****
}
public class Product
{
public int Id { get; set; }
[Required]
[MaxLength(75)]
public string Name { get; set; }
[Required]
[MaxLength(420)]
public string Description { get; set; }
public DateTime DateAdded { get; set; }
public User User { get; set; }
[Required]
public int UserId { get; set; }
// REVIEW THINGS
public ICollection<ProductReview> ProductReviews { get; set; }
// *****
}
答案 0 :(得分:1)
我刚刚尝试过:
create TEMPORARY table simotmp
SELECT ost_ticket.ticket_id,
ost_form_entry_values.field_id, ost_form_entry_values.value from ost_ticket
join ost_form_entry on ost_ticket.ticket_id=ost_form_entry.object_id
join ost_form_entry_values on ost_form_entry.id=ost_form_entry_values.entry_id
WHERE ost_ticket.`staff_id`=22 and ost_ticket.`status_id`=1 ;
SET @sql = NULL;
SELECT
GROUP_CONCAT(
'value AS ' + #field_id
value field_id
) INTO @sql
from simotmp;
SET @sql = CONCAT('SELECT distinct pt.ticket_id, ', @sql, ' from simotmp pt
');
#group by pt.ticket_id');
PREPARE stmt FROM @sql;
select @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
您没有提供protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<MemberReview>()
.HasKey(e => new { e.RevieweeId, e.ReviewerId });
builder.Entity<ProductReview>()
.HasKey(e => new { e.ReviewerId, e.ReviewedProductId });
builder.Entity<MemberReview>()
.HasOne<User>(e => e.Reviewer)
.WithMany(e => e.MemberReviews)
.HasForeignKey(e => e.ReviewerId)
.OnDelete(DeleteBehavior.Restrict); ////////
//
builder.Entity<MemberReview>() //
.HasOne<User>(e => e.Reviewee) /// => only one of these two can be cascade
.WithMany(e => e.ReviewedMembers) //
.HasForeignKey(e => e.RevieweeId) //
.OnDelete(DeleteBehavior.Restrict); ////////
builder.Entity<ProductReview>()
.HasOne<User>(e => e.Reviewer)
.WithMany(e => e.ReviewedProducts)
.HasForeignKey(e => e.ReviewerId)
.OnDelete(DeleteBehavior.Restrict);
}
类,所以我创建了这个类:
MemberReview
这是结果: