我遇到了从数据库中的对象中的列表中删除对象的问题。从列表数据库中删除对象实体
这里是我的类:
public class Client
{
public int Id {get; set;}
private List<Project> projects;
public virtual List<Projet> Projects
{
get { return projects; }
set
{
if (value != null)
projects = value;
}
}
}
这里是上下文:
public class MyDbContext : DbContext
{
public DbSet<Client> Clients {get; set;}
public DbSet<Projet> Projects {get; set;}
}
但是当我DAL,我尝试这样做:
public void ClientDeleteProject(Client c, Project p)
{
c.Projects.Remove(p);
db.SaveChanges();
}
好了,列表中仍然包含项目p。我甚至试图做一个RemoveAll(pr => pr.Id == p.Id),我也试图用db.Projects.Remove(p)直接删除数据库中的项目,但仍然没有任何反应。 我也尝试通过做一个新的列表()通过没有任何反应也清空列表...
我错过了什么?无论我使用的是对象还是其ID,“项目”列表af客户端不会更改...
谢谢您的帮助!
编辑:
下面是一些更具体的代码:
public class Client
{
[Key]
public int Id { get; set; }
private string name;
private string address;
private string image;
private List<Contact> contactsClient;
private List<Project> projectsClient;
//properties are defined after that, with the keyword "virtual" for the lists
}
其实我的问题是另一个类,但是它比较容易的方式呈现与“项目”,这里是有问题的类:
public class Contact : Person
{
private Client associatedClient;
private List<Projet> i;
private List<Projet> ir;
//same for the properties
}
人只是一个具有多个字符串的类,例如名字,姓氏......以及相关的属性。
我试过这个,但它不起作用。该联系人仍在数据库中...
Contact c = db.Projects.FirstOrDefault(co => co.Id == id);
if(c != null) {
db.Contacts.Remove(c);
db.SaveChanges();
}
我希望有所帮助。
难道它来自我的课程不是POCO的事实吗?
后你为什么试图删除内存中的东西(从你的列表中),然后调用db上的SaveChanges?这是没有意义的......如果你想从Db中删除它,你应该使用你的DbSet项目来删除它。否则,这在您的DAL中没有任何作用。您是否设置了断点来查看您的列表是否已填充? – cdie
请做正确的事情,使用同一类型的项目的变量,我的意思是“不使用联系人c”,但“项目p = db.Project ...”。在执行删除后使用返回的变量。你知道那个实体框架将使用你的对象来理解哪些表引用了删除吗? –
对不起,我犯了一个错误:我的意思是'db.Contacts.Remove'在最后一个片段。 – Raphallal