Просто чтобы убедить вас, что ваш первый фрагмент кода должен работать, вот простой пример, который вы можете скопировать, вставить и протестировать:
- Создание нового проекта консольного приложения (.NET 4)
- Добавить ссылку на
EntityFramework.dll
(EF 4.1)
- Удалите содержимое
Program.cs
и вставьте следующее:
->
using System.Data.Entity;
namespace EFDeleteTest
{
public class Car
{
public int Id { get; set; }
public string Name { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Car> Cars { get; set; }
}
class Program
{
static void Main(string[] args)
{
// Database with name "EFDeleteTest.MyContext"
// will be created automatically in SQL Server Express
int carId = 0;
using (var context = new MyContext())
{
var car = new Car { Name = "Test" };
context.Cars.Add(car);
context.SaveChanges();
carId = car.Id;
}
//Make breakpoint here and check that the car is indeed in the DB
using (var context = new MyContext())
{
var car = new Car() { Id = carId };
context.Cars.Attach(car);
context.Cars.Remove(car);
context.SaveChanges();
}
//Make breakpoint here and check that the car
//indeed has been deleted from DB
}
}
}
Если у вас есть БД SQL Server Express, она автоматически создаст БД.
Возможно, это может помочь вам сравнить с вашим кодом, потому что похоже, что что-то невидимое в ваших фрагментах кода вызывает другое поведение, которое вы описываете.