我在asp.net核心应用程序中使用EF7(实体框架核心).能否请您指出执行存储过程的正确方法?旧的方法与ObjectParameters和((IObjectContextAdapter)this).ObjectContext.ExecuteFunction不工作.
我正在开始一个新的ASP.NET 5预览模板来进行客户端开发.
我有一个数据库(MS SQL),我想使用Web API和实体框架访问.
在我的Models文件夹中我喜欢我以前做的,添加一个新项目,我想添加,ADO.NET Entity Data Model但它不存在.
我在这里错过了什么?
UPDATE
这是我尝试向项目添加新项目时唯一看到的内容.客户端和服务器端.
asp.net ado.net entity-framework visual-studio-2015 asp.net-core
我刚开始用EF7学习MVC6.我有一个存储过程,我想返回我模型中的一部分字段.如果我没有返回模型中的每个字段,我会得到"'FromSql'操作的结果中不存在所需的列'FirstName'".
有没有办法让一些列不需要,所以我只能返回我的模型中的一部分字段?
模型:
public class LoginViewModel
{
[Key]
public int UserID { get; set; }
[Required]
[Display(Name = "Username")]
public string Username { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Protected ID")]
public string ProtectedID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的测试程序:
CREATE PROCEDURE [dbo].[aaa_TopXXUsersTest]
@NumToReturn int = 10
AS
BEGIN
SET NOCOUNT ON;
select …Run Code Online (Sandbox Code Playgroud) 我正在使用SqlDataReader从SQL Server 2012数据库中获取数据:
SqlConnection connection = (SqlConnection)_db.Database.GetDbConnection();
await connection.OpenAsync();
SqlCommand command = new SqlCommand("dbo.[sp_MyStoredPrc] @InputId=1", connection);
var reader = await command.ExecuteReaderAsync();
if (reader.HasRows)
{
while (reader.Read())
{
int? var1 = (int?)reader["Column1Name"];
}
}
Run Code Online (Sandbox Code Playgroud)
int从数据库读取NULL 字段时,该字段
reader["Column1Name"]为空,因此代码在运行时引发InvalidCastException。
我试过了
reader.GetInt32(reader.GetOrdinal("Column1Name"))
Run Code Online (Sandbox Code Playgroud)
但这会引发System.Data.SqlTypes.SqlNullValueException。
我也尝试过
reader.GetSqlInt32(reader.GetOrdinal("Column1Name"))
Run Code Online (Sandbox Code Playgroud)
返回null,但类型SqlInt32不是int?我想要的。
我最终做了
if (!reader.IsDBNull(reader.GetOrdinal("Column1Name")))
int? var1 = (int?)reader["Column1Name"];
Run Code Online (Sandbox Code Playgroud)
哪个有效。
问题:
有没有比调用该IsDBNull方法更简单的方法?
为什么为什么reader["Column1Name"]返回nulldb 而不是db值为NULL且字段为a int?
我试图弄清楚如何在EF7 RC1中创建第二个DB上下文.在过去,我可以使用带有:base("connectionName")的构造函数,但这似乎不再是一个选项,因为它说不能将字符串转换为System.IServiceProvider.
我的第二个上下文代码如下:
public class DecAppContext : DbContext
{
public DecAppContext()
// :base("DefaultConnection")
{
}
public DbSet<VignetteModels> VignetteModels { get; set; }
public DbSet<VignetteResult> Result { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
在我的config.json中,我指定了连接:
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=aspnet5-xxxxx...;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Run Code Online (Sandbox Code Playgroud)
在我的启动的配置服务部分中,我添加了两个上下文:
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]))
.AddDbContext<DecAppContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
Run Code Online (Sandbox Code Playgroud)
applicationDB上下文工作正常,因为我可以创建用户并登录而不会出现问题
但是,当我尝试通过以下方式访问控制器中的其他上下文时:
private DecAppContext db = new DecAppContext();
var vignette = db.VignetteModels.SingleOrDefault(v => v.CaseId == vid);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
没有配置数据库提供程序.在设置服务时,通过在DbContext类或AddDbContext方法中覆盖OnConfiguring来配置数据库提供程序.
EF7 RC1中具有多个数据库上下文并访问它们的任何工作示例都将非常受欢迎.