В EntityFramework есть две сущности:
public class Book
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection
public class Chapter
{
public int Id { get; set; }
public string Name { get; set; }
public string Period { get; set; }
}
При добавлении в коллекцию Chapters объектов Chapter они автоматически добавляются в соответствующую таблицу в БД. При удалении в записях удаляется только ссылка на Book
Как сделать так, чтобы при удалении объектов из Chapters записи о них удалялись из соответствующей таблицы в БД?
Ответ
Добавьте BookId и Book в Chapter
public class Chapter
{
public int Id { get; set; }
public string Name { get; set; }
public string Period { get; set; }
public int BookId { get; set; }
public virtual Book Book { get; set; }
}
и сделайте его частью ключа:
modelBuilder.Entity
тогда при занулении Chapters или при вызове Chapters.Remove соответствующие Chapters будут удалены.
Полный пример:
public class Model1 : DbContext
{
public Model1()
: base("name=Model1")
{
}
public virtual DbSet
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity
base.OnModelCreating(modelBuilder);
}
}
public class Book
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection
public class Chapter
{
public int Id { get; set; }
public string Name { get; set; }
public string Period { get; set; }
public int BookId { get; set; }
public virtual Book Book { get; set; }
}
class Program
{
static void Main(string[] args)
{
using (var context = new Model1())
{
var book = new Book { Chapters = new List
book.Chapters.Add(new Chapter());
book.Chapters.Add(new Chapter());
context.SaveChanges();
}
using (var context = new Model1())
{
var book = context.Books.Include("Chapters").First();
book.Chapters.Add(new Chapter());
book.Chapters.Add(new Chapter());
context.SaveChanges();
}
using (var context = new Model1())
{
Console.WriteLine(context.Books.Count()); // 1
Console.WriteLine(context.Chapters.Count()); // 5
}
using (var context = new Model1())
{
var b = context.Books.Include("Chapters").First();
b.Chapters = null;
context.SaveChanges();
}
using (var context = new Model1())
{
Console.WriteLine(context.Books.Count()); // 1
Console.WriteLine(context.Chapters.Count()); // 0
}
}
}
Комментариев нет:
Отправить комментарий