我的sqlserver数据库中有一个存储过程,它返回多个结果集。
我正在使用msdn的以下链接从实体框架中的SP读取多个结果集。
https://msdn.microsoft.com/en-us/library/jj691402(v=vs.113).aspx
要读取数据,我需要在xyzDBContext类中为每个结果集设置DBS。
模特课程:
public class AreaView
{
public String Area { get; set; }
public String Weight { get; set; }
}
的DbContext:
public class EnsembleAPIContext : DbContext
{
public DbSet<AreaView> area {get; set;}
// I want to prevent this table from getting created in db
}
这就是我读取结果集并将其映射到上面创建的dbset的方式。
reader.NextResult();
var contributionArea = ((IObjectContextAdapter)db)
.ObjectContext
.Translate<ContributionArea>(reader, "area ", MergeOption.AppendOnly);
我需要做的是我想为这些结果集创建实体,但我不希望框架在数据库中为这些实体创建表。
注意:执行此操作的原因是,sp返回的结果集没有主键,因此假设我们可以使用不带PK的实体创建有效表。
这可能吗?
感谢任何帮助。
答案 0 :(得分:6)
我们可以创建一个DBSet&lt;&gt;没有在数据库中创建相应的表
没有。 DbSet<T>
表示真实的数据库表或视图。
要读取数据,我需要在xyzDBContext类中为每个结果集设置DBS。
你没有。 ObjectContext.Translate
方法可用于将DbReader
映射到任何类。链接的示例使用实体类型,但还有另一个Translate
方法overload适用于Directly Executing Store Commands MSDN主题中描述的任何类型 - 实现结果类型部分。
话虽如此,请从您的上下文中删除DbSet
并使用以下内容:
var areaView = ((IObjectContextAdapter)db).ObjectContext.Translate<AreaView>(reader);
答案 1 :(得分:6)
答案&#34; 如果我们可以跳过使用实体框架在数据库中创建表格&#34;:是
使用[NotMapped]
属性。
[NotMapped]
public class Employee
{
public int ID { get; set; }
public String name { get; set; }
}
您可以将此模型用于通用目的,并且不会在数据库中为此创建表。
另一种方法是
在OnModelCreating()
方法
modelBuilder.Ignore<Employee>();
这样DBContext将忽略为此模型创建表。