代碼和模型是這樣的圖:我有一點點複雜的模型,關於EF級聯先刪除
public class Post
{
public int Id { get; set; }
public string title { get; set; }
public int fid { get; set; }
public int uid { get; set; }
public virtual lnk lnk { get; set; }
public virtual user user { get; set; }
public virtual ICollection<img> imgs { get; set; }
}
public class lnk
{
public int Id { get; set; }
public string lnkman { get; set; }
}
public class model1:Post
{
public string content { get; set; }
}
public class user
{
public int uid { get;set; }
public string Name {get;set;}
public virtual ICollection<Post> posts { get; set; }
}
public class img
{
public int id { get; set; }
public string imgUrl { get; set; }
public int pid { get; set; }
public virtual Post post { get; set; }
}
public class PostContext : DbContext
{
public DbSet<Post> posts { get; set; }
public DbSet<user> users { get; set; }
public DbSet<img> imgs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>().HasKey(i=>i.Id);
modelBuilder.Entity<lnk>().HasKey(i => i.Id);
modelBuilder.Entity<Post>().HasRequired(i => i.lnk).WithRequiredPrincipal();
modelBuilder.Entity<Post>().ToTable("Post");
modelBuilder.Entity<lnk>().ToTable("Post");
modelBuilder.Entity<model1>().ToTable("model1");
modelBuilder.Entity<user>().HasKey(i => i.uid).ToTable("user");
modelBuilder.Entity<user>().HasMany(i => i.posts)
.WithRequired(i => i.user)
.HasForeignKey(i =>i.uid).WillCascadeOnDelete(false);
modelBuilder.Entity<img>().HasKey(i => i.id).ToTable("img");
modelBuilder.Entity<Post>().HasMany(i => i.imgs)
.WithRequired(i => i.post)
.HasForeignKey(i => i.pid)
.WillCascadeOnDelete(false);
}
}
添加和列表方法會奏效。但delele這樣的:
using (var db = new PostContext())
{
//model1 ToDel = new model1{ Id=id };
//b.Entry(ToDel).State = System.Data.EntityState.Deleted;
var ToDel = db.users.Single(i => i.uid == id);
db.users.Remove(ToDel);
db.SaveChanges();
return id + "DE: well done!" ;
}
System.Data.SqlClient.SqlException:DELETE語句與REFERENCE約束 「FK_dbo.Post_dbo.user_uid」 發生於數據庫 「jefunfl」 conflict.The衝突,臺「dbo.Post 「,'uid'列
我想刪除用戶的帖子和帖子與帖子的imgs。 我該怎麼做?有人能提供任何提示嗎?
順便說一句,我的中文英文可能很有趣。原諒我。 這是我的第一篇文章,但我不是新人。謝謝
你是否啓用級聯刪除你的表之間的關係? – 2012-08-16 20:15:33
您使用WillCascadeOnDelete(** false **)。 MSDN:如果級聯刪除處於打開狀態,則爲true;否則,是錯誤的。 – 2012-08-16 20:18:39
你可以給你的問題添加一個答案,並將下面的文本添加到它的「添加這個」? (所以從你的帖子中刪除它)。 – 2012-08-17 12:57:43