在一个非常简单的房地产程序中,我尝试使用 EF Code First 列出房屋的所有图像,并附加到我现有的数据库,我使用的是 MySQL Conector 6.3.6,这是我的代码。
namespace CodeFirstMySQL
{
class Program
{
static void Main(string[] args)
{
RealEstate db = new RealEstate();
var houses = (from h in db.Houses
select h).Take(10);
foreach (var house in houses)
{
Console.WriteLine(string.Format("Images for {0}", house.Address));
foreach (Image image in house.Images)
{
Console.WriteLine(string.Format("=> {0}", image.FileName));
}
}
}
}
public class RealEstate : DbContext
{
public DbSet<House> Houses { get; set; }
public DbSet<Image> Images { get; set; }
}
[Table("CADIMO")]
public class House
{
[Column("CODIGO")]
public int HouseId { get; set; }
[Column("ENDERECO")]
public string Address { get; set; }
public virtual ICollection<Image> Images { get; set; }
}
[Table("CDIMIM")]
public class Image
{
[Key]
[Column("CODIGO", Order = 0)]
public int HouseId { get; set; }
[Key]
[Column("CODIGO_I", Order = 1)]
public int ImageOrder { get; set; }
[Column("FILE_PATH")]
public string FileName { get; set; }
}
}
当我尝试运行它时,出现以下错误:
Images for Porto das Dunas
Unhandled Exception: System.Data.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.
---> MySql.Data.MySqlClient.MySqlException: There is already an open DataReader associated with this Connection which must be closed first.
at MySql.Data.MySqlClient.MySqlCommand.CheckState()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
--- End of inner exception stack trace ---
有趣的是,如果我使用下面的查询
List<House> houses = (from h in db.Houses select h).Take(10).ToList();
然后它就可以工作了,但是执行了一个急切的加载,因为当我检查每个房子的 Images 属性时,它们已经被填充了。那么,我的问题是,Lazy Load 可以与 MySQL 和 Code First 一起使用吗?
我知道 Linq 在我们使用它之前不会执行查询,所以可能在延迟加载图像时 DataReader 仍然打开,这就是问题发生的原因。
感谢任何有关此问题的信息。
谢谢 安德森福塔莱萨
最佳答案
...so maybe the DataReader is still open when it's time to lazy load the images and this is why the problem is taking place.
这正是正在发生的事情,但我认为原因并不完全如您所想。 DataReader 仍然打开,不是因为 Linq 中的延迟执行,而是因为当您尝试访问尚未加载的其他属性时,您仍在遍历查询结果。当您调用 .ToList()结果立即返回并存储在 List<TEntity> 中在客户端的内存中,而不是一次返回 1 条记录。
您可以在 MS SQL Server 中使用设置 MultipleActiveResultSets=true 来解决这个问题在您的连接字符串中,但 MySQL 不支持此设置。不过,你应该能够做的是使用 .Include("tablename") 预先加载你需要的额外数据。
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);
关于MySQL + Code First + Lazy Load 问题!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5951373/
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有, 也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是: