我使用实体框架代码创建一个网站 - 首先是: 用户可以销售很多产品:一对多。 用户可以购买许多产品,许多用户可以购买产品:多对多。 我一直收到错误:
System.Data.SqlClient.SqlException:'介绍FOREIGN KEY约束' FK_dbo.UserProducts_dbo.Products_Product_ProductId'在桌面' UserProducts'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。
我确实希望级联删除以删除属于删除其帐户的用户的产品,或删除UserProduct表中属于已删除用户或已删除产品的记录。 我做错了什么?
这是User类:
public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public ICollection<Product> Products { get; set; }
[InverseProperty("Users")]
public ICollection<Product> Cart { get; set; }
public User()
{
Products = new List<Product>();
Cart = new List<Product>();
}
}
这是产品类:
public class Product
{
[Key]
public int ProductId { get; set; }
public int OwnerId { get; set; }
public string Title { get; set; }
public string ShortDescription { get; set; }
public string LongDescription { get; set; }
public byte[] Picture1 { get; set; }
public byte[] Picture2 { get; set; }
public byte[] Picture3 { get; set; }
[ForeignKey("OwnerId")]
public User User { get; set; }
public ICollection<User> Users { get; set; }
public Product()
{
Users = new List<User>();
}
}
答案 0 :(得分:1)
首先,我需要在多对多关系用户到产品中为中间表编写一个类:
public class UserProduct
{
[Key, Column(Order = 0), ForeignKey("User")]
public int UserId { get; set; }
[Key, Column(Order = 1), ForeignKey("Product")]
public int ProductId { get; set; }
public User User { get; set; }
public Product Product { get; set; }
}
允许我禁止从此表删除级联到User表(覆盖上下文类中的OnModelCreating):
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<UserProduct>().HasRequired(t =>
t.User).WithMany(t => t.Cart).WillCascadeOnDelete(false);
}
禁用级联有效,因为: