C# 代码优先:如何停止在数据库中生成类
我的项目在当前数据库上工作时遇到了一个问题,但当我首先使用应用程序中的代码创建新数据库时,访问视图的类现在正在创建表。通过删除其他属性以仅显示相关代码,下面的类已被缩短 我的DBContextClass中有一个:C# 代码优先:如何停止在数据库中生成类,c#,asp.net-mvc,entity-framework,ef-code-first,C#,Asp.net Mvc,Entity Framework,Ef Code First,我的项目在当前数据库上工作时遇到了一个问题,但当我首先使用应用程序中的代码创建新数据库时,访问视图的类现在正在创建表。通过删除其他属性以仅显示相关代码,下面的类已被缩短 我的DBContextClass中有一个: public class MyDbContext : DbContext { public MyDbContext () { } public virtual DbSet<Order> Order{ get; set; }
public class MyDbContext : DbContext
{
public MyDbContext ()
{
}
public virtual DbSet<Order> Order{ get; set; }
public virtual DbSet<v_OrdersByUser> v_OrdersByUsers { get; set; }
}
这将按预期创建一个表。但下面是我的SQL视图类:
public class v_OrdersByUser
{
[Key]
public string UserName { get; set; }
public int OrdersCount { get; set; }
}
但是这个类也创建了一个表
在数据库中创建视图后,如何阻止这种情况发生,同时保持访问视图的能力?请尝试在DbContext中删除这一行
public virtual DbSet<v_OrdersByUser> v_OrdersByUsers { get; set; }
公共虚拟数据库集v_OrdersByUsers{get;set;}
如果将其添加为DbSet,默认情况下,它将为您创建一个新表
如果您将其用作视图模型,请不要将其添加到此层。要删除该表,您需要删除v_OrdersByser的数据库集 要解决此问题,请考虑将用户(或用户名)添加到Orders表中。
然后,您可以简单地根据用户名对所有订单进行排序,并使用linq从订单数据库集中检索每个用户名的订单数量。您可以使用数据注释来完成此操作,如下所示:
[NotMapped]
public class v_OrdersByUser
{
[Key]
public string UserName { get; set; }
public int OrdersCount { get; set; }
}
modelBuilder.Ignore<v_OrdersByUser>();
或者使用Fluent Api,如下所示:
[NotMapped]
public class v_OrdersByUser
{
[Key]
public string UserName { get; set; }
public int OrdersCount { get; set; }
}
modelBuilder.Ignore<v_OrdersByUser>();
modelBuilder.Ignore();
但是当我在代码中调用视图时,我需要这一行。e、 g.Dictionary ordersByUser=\u dbContext.v\u OrdersByUsers.ToDictionary(a=>a.UserName,a=>a.OrderCount)代码>请查看此链接:也许您需要删除其中一个类别。”“订单”或“v_OrdersByser”。