rjo*_*vic 8 entity-framework cascade foreign-keys ef-code-first
我是EF代码第一校长的新手,目前还不知道该做什么..我有2个POCO课程..
public class Problem
{
public int ProblemID { get; set; }
public int UserID { get; set; }
public int CategoryID { get; set; }
public int RatingID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public int State { get; set; }
public DateTime CreatedOn { get; set; }
public virtual Rating Rating { get; set; }
public virtual Category Category { get; set; }
public virtual User User { get; set; }
public virtual ICollection<Picture> Pictures { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
public class User
{
public int UserID { get; set; }
public int RoleID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string SocialHandle { get; set; }
public DateTime RegisteredOn { get; set; }
public virtual Role Role { get; set; }
public virtual ICollection<Point> Points { get; set; }
public virtual ICollection<Problem> Problems { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的数据库创建没问题,但是当我尝试使用自定义初始化程序在其中初始化一些数据时,我收到以下错误:
在表'问题'上引入FOREIGN KEY约束'Problem_User'可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.
无法创建约束.查看以前的错误.
这是我的初始化程序:
protected override void Seed(CleanStreets context)
{
var adminRole = new Role { Name = "Administrator", RoleID = 0 };
var moderatorRole = new Role { Name = "Moderator", RoleID = 1 };
var userRole = new Role { Name = "User", RoleID = 2 };
context.Roles.Add(adminRole);
context.Roles.Add(userRole);
context.Roles.Add(moderatorRole);
var admin = new User { Name = "admin", Surname = "admin", Role = adminRole, Email = "fake@fake.com", Password = "", RegisteredOn = DateTime.Now, SocialHandle = null };
var user = new User { Name = "user", Surname = "user", Role = userRole, Email = "fake@fake2.com", Password = "", RegisteredOn = DateTime.Now, SocialHandle = null };
context.Users.Add(admin);
context.Users.Add(user);
var categoryOne = new Category { Title = "Komunalni problemi", CategoryID = 0 };
var categoryTwo = new Category { Title = "Ostali problemi", CategoryID = 1 };
context.Categories.Add(categoryOne);
context.Categories.Add(categoryTwo);
var problem = new Problem { Category = categoryOne, Title = "Prvi testni problem", Description = "Ovo je testni opis", Latitude = 45.5, Longitude = 15.5, State = 0, CreatedOn = DateTime.Now, User = user };
context.Problems.Add(problem);
base.Seed(context);
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?先感谢您!
Lad*_*nka 15
那将是因为Comments.默认情况下,EF使用引用上的级联删除.在您的情况下,级联删除将从用户 - >问题,用户 - >注释创建,但也可以从问题 - >注释创建.如果您删除用户级联到同一评论记录可以来自Problem和User.这在SQL Server中是不允许的.每个记录只能通过单个级联删除路径访问.
为了避免这种情况,你必须使用流畅的映射来转换一个关系上的级联删除(你必须选择哪一个).用户 - >评论的示例
public class Context : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Comment> Comments { get; set; }
public DbSet<Problem> Problems { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(u => u.Comments)
.HasRequired(c => c.User)
.HasForeignKey(c => c.UserId)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
}
Run Code Online (Sandbox Code Playgroud)
可能存在其他实体和关系可能会在您的模型中导致此问题,但从Comment您的示例中看起来很明显.
| 归档时间: |
|
| 查看次数: |
8894 次 |
| 最近记录: |