删除EF c#中的表,我的表名是什么

时间:2014-09-12 21:09:49

标签: c# entity-framework datatable

我试图删除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。我在这里做错了吗?

2 个答案:

答案 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; }
}