C# 如何在数据库实体框架中创建实体集或模型而不创建相应的表

C# 如何在数据库实体框架中创建实体集或模型而不创建相应的表,c#,.net,sql-server,entity-framework,C#,.net,Sql Server,Entity Framework,我的sqlserver数据库中有一个存储过程,它返回多个结果集 我正在使用msdn中的以下链接从实体框架中的SP读取多个结果集 要读取数据,我需要在xyzDBContext类中为每个结果集设置数据库集 型号类别: public class AreaView { public String Area { get; set; } public String Weight { get; set; } } public class EnsembleAPIContext : DbC

我的sqlserver数据库中有一个存储过程,它返回多个结果集

我正在使用msdn中的以下链接从实体框架中的SP读取多个结果集

要读取数据,我需要在xyzDBContext类中为每个结果集设置数据库集

型号类别:

public class AreaView
{
    public String Area { get; set; }
    public String Weight { get; set; }

}
 public class EnsembleAPIContext : DbContext
    {
       public DbSet<AreaView> area {get; set;}

// I want to prevent this table from getting created in db

      }
DBContext:

public class AreaView
{
    public String Area { get; set; }
    public String Weight { get; set; }

}
 public class EnsembleAPIContext : DbContext
    {
       public DbSet<AreaView> area {get; set;}

// I want to prevent this table from getting created in db

      }
公共类集合上下文:DbContext
{
公共数据库集区域{get;set;}
//我想阻止在db中创建此表
}
这就是我如何读取结果集并将其映射到上面创建的数据库集。

 reader.NextResult();
                    var contributionArea = ((IObjectContextAdapter)db)
                       .ObjectContext
                       .Translate<ContributionArea>(reader, "area ", MergeOption.AppendOnly);
reader.NextResult();
变量贡献区域=((IObjectContextAdapter)db)
.ObjectContext
.翻译(读卡器,“区域”,合并选项。仅附录);
我需要做的是为这些结果集创建实体,但我不希望框架为数据库中的这些实体创建表

注意:这样做的原因是,sp返回的resultset没有主键,因此假设我们可以使用entity创建一个有效的表,而不使用PK

这可能吗

感谢您的帮助

我们可以创建一个数据库集而不在数据库中创建相应的表吗

否。
DbSet
表示真实的数据库表或视图

要读取数据,我需要在xyzDBContext类中为每个结果集设置数据库集

你没有。
ObjectContext.Translate
方法可用于将
DbReader
映射到任何类。链接的示例使用实体类型,但还有另一种
Translate
方法适用于MSDN主题中描述的任何类型-具体化结果类型部分

话虽如此,请从上下文中删除
DbSet
,并使用如下内容:

var areaView = ((IObjectContextAdapter)db).ObjectContext.Translate<AreaView>(reader);
var areaView=((IObjectContextAdapter)db.ObjectContext.Translate(reader);
如果我们可以跳过使用实体框架在数据库中创建表,那么“的答案是:

使用
[NotMapped]
属性

 [NotMapped]
   public class Employee
    {
        public int ID { get; set; }
        public String name { get; set; }
    }
您可以将此模型用于一般用途,并且不会在数据库中为此创建表

另一种方法是

OnModelCreating()
方法中

modelBuilder.Ignore<Employee>();
modelBuilder.Ignore();

这样,DBContext将忽略为此模型创建表。

为什么需要DbSet?通常在DbContext上创建一个方法以从SP获取数据,请参见@CodeCaster SP不是由Codefirst创建的。它已经存在了。我只是从代码中调用它。恐怕你没有理解我的评论。首先,它与代码无关。您将
DbSet
用于表,而不是SP。@CodeCaster您是否检查了msdn链接,我将按照该链接读取多个结果集。现在在阅读resultset时,我们需要提到要映射resultset的实体。现在,我只想创建一个实体用于此映射,而不是在数据库中为此创建表。我希望这是清晰的不,我没有读那个链接。现在我做到了,但我仍然认为没有必要使用DbSet。阅读并在问题中加入所有相关细节。感谢您的澄清。那么EF将为模型类创建表??那么它是如何识别他们的呢?只是好奇。EF使用了几种方法来发现类是实体。其中一个是定义了
DbSet
:)其他是通过导航属性或flient API调用,如
modelBuilder.Entity()
等。我找到了跳过创建表的方法。请核对我的答案。谢谢您的时间。是的,您可以告诉EF忽略实体,但是
DbSet
没有意义-您对此无能为力。如果您尝试在查询或其他情况下使用它,它将令人困惑,并且很可能引发异常。所以我坚持我的答案,但在我需要模型来映射结果集的情况下,没有必要创建数据库集和表。只需使用模型,在这些情况下,忽略将非常有用。:)