Dhe*_*mar 2 .net c# sql-server entity-framework
我的sqlserver数据库中有一个存储过程,它返回多个结果集.
我正在使用msdn的以下链接从实体框架中的SP读取多个结果集.
https://msdn.microsoft.com/en-us/library/jj691402(v=vs.113).aspx
要读取数据,我需要在xyzDBContext类中为每个结果集设置DBSets.
型号类:
public class AreaView
{
public String Area { get; set; }
public String Weight { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
的DbContext:
public class EnsembleAPIContext : DbContext
{
public DbSet<AreaView> area {get; set;}
// I want to prevent this table from getting created in db
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何读取结果集并将其映射到上面创建的dbset.
reader.NextResult();
var contributionArea = ((IObjectContextAdapter)db)
.ObjectContext
.Translate<ContributionArea>(reader, "area ", MergeOption.AppendOnly);
Run Code Online (Sandbox Code Playgroud)
我需要做的是我想为这些结果集创建实体,但我不希望框架在数据库中为这些实体创建表.
注意:执行此操作的原因是,sp返回的结果集没有主键,因此假设我们可以使用不带PK的实体创建有效表.
这可能吗?
任何帮助表示赞赏.
" 如果我们可以跳过使用Entity框架在数据库中创建表 "的答案是:是的
使用[NotMapped]
属性.
[NotMapped]
public class Employee
{
public int ID { get; set; }
public String name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您可以将此模型用于通用目的,并且不会在数据库中为此创建表.
另一种方法是
在OnModelCreating()
方法中
modelBuilder.Ignore<Employee>();
Run Code Online (Sandbox Code Playgroud)
这样DBContext将忽略为此模型创建表.
我们可以创建DBSet <>而无需在数据库中创建相应的表
No. DbSet<T>
表示真实的数据库表或视图.
要读取数据,我需要在xyzDBContext类中为每个结果集设置DBSets.
你没有.该ObjectContext.Translate
方法可用于映射DbReader
到任何类.链接的示例使用实体类型,但是还有另一种Translate
方法重载适用于任何类型,如直接执行存储命令 MSDN主题 - 实现结果类型部分中所述.
话虽如此,请DbSet
从您的上下文中删除并使用以下内容:
var areaView = ((IObjectContextAdapter)db).ObjectContext.Translate<AreaView>(reader);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3788 次 |
最近记录: |