我试图删除EF中包含大量对象实例及其属性的表,但代码不起作用。到目前为止我所拥有的是:
public class Item
{
[Key]
public int index { get; set; }
public string name;
public List<string> type;
public List<string> def;
public HashSet<string> syns;
public HashSet<string> generator_list = new HashSet<string>();
public List<Point> related_items2 = new List<Point>();
}
EF代码看起来像
public class Context : DbContext
{
public Context()
: base()
{
}
public DbSet<Item> items_db { get; set; }
}
然后是实际的代码:
using (var ctx = new Context())
{
ctx.Database.ExecuteSqlCommand("TRUNCATE TABLE [items_db]");
}
但我得到的错误是Cannot find the object items_db because it does not exist or you do not have permission.
一个相关的问题是,我首先删除它的原因是因为我一次又一次地向它添加相同的对象,但是当我尝试检索对象时,所有的除index属性外,属性为0或null。我在这里做错了吗?
答案 0 :(得分:1)
您的表名称为Items
,类似于复数的类名。
using (var ctx = new Context())
{
ctx.Database.ExecuteSqlCommand("TRUNCATE TABLE Items");
}
还应该通过DbSet
using (var ctx = new Context())
{
IQueryable<Item> allItems = ctx.items_db;
ctx.items_db.RemoveRange(allItems);
ctx.SaveChanges();
}
这实际上只会删除所有项目,但不会重置自动增量计数器等。
答案 1 :(得分:1)
在回答您的相关问题时,所有字段为0或null的原因是因为Entity Framework仅将数据库列映射到属性,而不是字段。此外,EF不会在您的实体类中存储字符串列表。一种选择是为每个列表创建一个新实体。
尝试这样的事情(你需要为每个ItemType,Def,Syn,Generator和Point创建实体类):
public class Item
{
[Key]
public int Index { get; set; }
public string Name { get; set; }
public ICollection<ItemType> Types { get; set; }
public ICollection<Def> Definitions { get; set; }
public ICollection<Syn> Syns { get; set; }
public ICollection<Generator> GeneratorList { get; set; }
public ICollection<Point> RelatedItems { get; set; }
}
新的实体类可能如下所示:
public class ItemType
{
public int Id { get; set; }
public string Value { get; set; }
}