代码优先:如何阻止类在数据库中生成

时间:2016-01-12 09:11:39

标签: c# asp.net-mvc entity-framework ef-code-first

我遇到的问题是我的项目在当前数据库上工作,但是当我在我的应用程序中使用代码来创建一个新的数据库时,首先访问视图的类正在创建表。通过删除其他属性以显示相关代码,缩短了以下类别。

我有一个我的DBContextClass:

public class MyDbContext : DbContext
{
     public MyDbContext ()
     {

     }
     public virtual DbSet<Order> Order{ get; set; }
     public virtual DbSet<v_OrdersByUser> v_OrdersByUsers { get; set; }
}

这是我的订单类:

[Table("Orders")]
public class Order
{
      [Key]
      public int Id { get; set; }
      etc
}

按预期创建表。但这是我的SQL视图类:

public class v_OrdersByUser
{
    [Key]
    public string UserName { get; set; }
    public int OrdersCount { get; set; }
}

但是这个类也创建了一个表。

如何在数据库中创建视图后,如何阻止这种情况发生,并保持访问视图的能力?

3 个答案:

答案 0 :(得分:0)

尝试在DbContext中删除此行

public virtual DbSet<v_OrdersByUser> v_OrdersByUsers { get; set; }

如果将其添加为DbSet,默认情况下会为您创建一个新表。

如果您将其用作视图模型,请不要在此图层中添加它。

答案 1 :(得分:0)

要删除表,您需要删除v_OrdersByUser的DbSet。

要解决这个问题,请考虑将用户(或用户名)添加到Orders表中。 然后,您可以根据用户名简单地对所有订单进行排序,并使用linq从Order DbSet中检索每个用户名的订单数。

答案 2 :(得分:0)

您可以使用数据注释执行此操作,如下所示:

[NotMapped]
public class v_OrdersByUser
{
    [Key]
    public string UserName { get; set; }
    public int OrdersCount { get; set; }
}

或者使用Fluent Api,就像这样:

modelBuilder.Ignore<v_OrdersByUser>();