小编Álv*_*cía的帖子

EF中这两个异步调用有什么区别?

我在EF6中看到了一个新功能,即异步方法.我找到了一个例子.

第一种方式是普通呼叫,例如EF5:

public Store FindClosestStore(DbGeography location)
{
    using (var context = new StoreContext())
    {
        return (from s in context.Stores
           orderby s.Location.Distance(location)
           select s).First();
    }
}
Run Code Online (Sandbox Code Playgroud)

和新的调用,在EF6中使用异步方法.

public async Task<Store> FindClosestStore(DbGeography location)
{
    using (var context = new StoreContext())
    {
        return await (from s in context.Stores
            orderby s.Location.Distance(location)
            select s).FirstAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我可以执行以下操作(语法是aprox,我是通过内存执行的):

public async Task<Store> MyAsyncMethod(DbGeography location)
{
     return await Task.Run(() => FindClosestStore());
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,我可以使用Task.Run调用第一个方法,即没有异步,等待结果.目前,是我用来调用异步任何方法的方式,而不仅仅是EF.这也是异步调用,或者当我使用EF6异步方法时真正的异步调用?

为什么在新版本的EF6中需要异步方法?只是为了简单?

c# asynchronous entity-framework async-await

5
推荐指数
1
解决办法
2109
查看次数

如何在.net 4.0中使用asyn/await?AsyncTargetingPack和Microsoft.Bcl.Async之间的区别?

我想在C#4.0中使用async/await,直到知道,我已经使用了异步CTP v3,但似乎这是一个不好的选择,如果我使用VS2012则更多.

在VS2012中,至少有两个选项,Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async.

第一个,Microsoft.Bcl.Async(Bcl),已经发布晚于AsyncTargetingPack(ATP),但Bcl是beta.

然而,ATP适用于目标是银光5或.NET 4.0的项目,而Bcl似乎可以与银光4,银光5,Windows Phone 7.5和.NET 4.0兼容.

ATP已被弃用?是兼容还是他们是不同的实现,如果我使用一个我总是必须使用相同的?

哪个是最好的选择?

c# async-await

5
推荐指数
1
解决办法
1150
查看次数

我可以在例外中包含一个携带附加信息的对象吗?

我想定义一个自定义异常,我想知道我是否可以包含一个类而不是字符串作为消息.原因是我想在一个更灵活的结构中发送额外的信息.

c# exception

5
推荐指数
2
解决办法
1047
查看次数

如何改变隔离级别?

我正在使用EF 4.0,我想使用隔离级别serializable,因为在事务中我想在读取时阻塞寄存器.

好吧,在SQL Server中我尝试使用此命令更改隔离级别:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Run Code Online (Sandbox Code Playgroud)

在C#中,我使用此代码尝试阻止寄存器:

using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.Serializable }))
{
   Entities myContext = new Entities();
   string colors = "select * from Colors where IDColor = 2";
   Colors myColor = myContext.Colors.SqlQuery(colors).FirstOrDefault<Colors>();
   myColor.Color = "Red";
   myContext.SaveChanges();
   scope.Complete();                  
}
Run Code Online (Sandbox Code Playgroud)

如果我逐行执行我的代码,如果我得到SaveChanges但仍然没有执行,如果我使用SQL Server Management Studio查询表颜色,我可以获取记录.

然后,如果我执行保存更改并且我得到了scope.Clompete(),如果我使用Management Studio尝试查询,我什么也得不到,因为寄存器被阻止,所以当我完成我的C#代码时,寄存器被释放,我得到了结果管理工作室.

所以我的问题是,如何在C#中使用可序列化的隔离级别?难道我做错了什么?

PS:我注意到如果我使用这个命令:

DBCC useroptions;
Run Code Online (Sandbox Code Playgroud)

我看到隔离级别是serializable,但是如果我关闭Management Studio并再次连接并且看到隔离级别是默认值readCommitted.

所以我的问题是如何设置我的数据库的默认隔离级别.

c# entity-framework transactions sql-server-2008

5
推荐指数
1
解决办法
3241
查看次数

如何在"in"子句中使用Entity Framework中的参数?

我正在使用Entity Framework 4.0,我想使用以下查询:

为此,我执行以下操作:

strSQLQuery = "select * from MyTable where IDData IN (@IDs)";
lstParameters.Clear();
myParameter = new SqlParameter("@IDs", strIDs);
lstParameters.Add(myParameter);

myContext.MyTable.SqlQuery(strSQLQuery, lstParameters.ToArray<object>()).ToList<MyTable>();
Run Code Online (Sandbox Code Playgroud)

但我得到一个例外,说它无法转换nvarcharbigint.

这是因为参数是类型字符串,表中的ID是bigint.

我尝试创建一个long列表并添加一些ID,但我得到其他错误.

如何在查询中使用列表o ID作为参数?

我想使用参数,如果可能的话.

谢谢.

c# parameters entity-framework entity-framework-4

5
推荐指数
1
解决办法
9635
查看次数

如何以N:N关系手动加载相关实体?

我正在使用EF5,当关系为1:N时,如果我想加载相关实体,我会执行以下操作:

此时,EF使用相关实体填充主要实体的属性导航.另外,在每个实体的类型的本地属性中,dbContext我拥有每种类型的所有实体.

但是,如果我使用N:N关系做同样的事情,我没有关系中间表的实体,当我执行查询时,我在dbContext每个类型的实体的本地执行,但是未填充属性导航.

我想知道为什么以及它是否存在替代方案.

我使用这种方式是因为我想使用T-SQL来创建动态查询.如果我使用预先加载,那么动态查询的灵活性与使用TSQL时不同,效率较低.如果我使用显式加载我做N个额外的查询,主要实体的结果中的每个记录之一用我的方式,我只有一个额外的查询,因为我一次得到所有相关的实体.如果我使用延迟加载我有同样的问题,N个额外的查询.

当关系为N:N时,为什么EF不会填充相关属性?

谢谢.

c# many-to-many entity-framework-5

5
推荐指数
1
解决办法
1935
查看次数

如何在调试时看到IEnumerable的元素?

我正在使用IEnumerable,在调试器中我想看到它有的项目,但我不能,因为没有任何属性也没有项目.

是否可以看到具有IEnumerable的项目?

c# debugging visual-studio

5
推荐指数
3
解决办法
2828
查看次数

是否可以在 PC 的共享文件夹中使用 SQLite 数据库?

我正在开发一个 UWP 应用程序(Windows 手机 10),并且我在 LAN 中的 PC 的共享文件夹中有一个 SQLite 数据库。我想知道我是否可以在 windows phone 应用程序中使用这个数据库,就像我在我的 WPF 应用程序中所做的那样,我可以设置数据库的路径,我可以在我的局域网中的任何计算机上使用它。

谢谢。

c# sqlite windows-phone win-universal-app windows-10-mobile

5
推荐指数
2
解决办法
6531
查看次数

未将术语“ Scaffold-DbContext”识别为cmdlet的名称

我有两个项目的解决方案,一个是主项目,第二个是将使用EF Core 10.0 RC2的项目。

在第二个项目中,我使用以下三个命令安装EF Core,并运行以下nuget命令进行安装:

Install-Package Microsoft.EntityFrameworkCore.SqlServer –Pre
Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design –Pre
Run Code Online (Sandbox Code Playgroud)

稍后,我可以使用以下命令从数据库创建模型:

Scaffold-DbContext "'Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;'" Microsoft.EntityFrameworkCore.SqlServer
Run Code Online (Sandbox Code Playgroud)

问题是,如果我退出VS2015并再次打开,如果我尝试运行相同的命令来再次生成模型,则会收到此错误:

术语'Scaffold-DbContext'不被视为cmdlet的名称。

我不知道这是什么问题,我尝试安装了entityFrameworks.Commands,但问题仍未解决。

entity-framework cmdlet visual-studio

5
推荐指数
1
解决办法
5421
查看次数

我无法在.net 4.7项目中使用System.Runtime 4.3.0

我有一个.net 4.7项目,它安装了System.Runtime的4.3.0版本.但是当我运行项目时,我得到一个异常,说它找不到版本4.1.0.0.

如果我去nuget管理器,我在项目中安装了4.1.0.0版本,然后就可以了.所以我试图再次更新到4.3.0版本,但同样,我遇到了问题.

该项目一直工作到现在,我真的不知道为什么它停止工作,因为我没有触及任何与nuget包相关的东西.

此外,我试图创建一个新的空解决方案并添加项目,尝试一个新的解决方案,但问题是相同的.

我怎么能解决这个问题?

谢谢.

c# visual-studio nuget

5
推荐指数
1
解决办法
1393
查看次数