我只是想使用ef和rx而感到舒服。不幸的是,我遇到了一个我无法解决的问题。我有一个名为world.sql的MySQL测试数据库。 EF制作了以下内容RX Extension ToObservable()在查询嵌套的IColletion时产生异常
public worldEntities()
: base("name=worldEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<city> city { get; set; }
public virtual DbSet<country> country { get; set; }
public virtual DbSet<countrylanguage> countrylanguage { get; set; }
我现在试图比较“简单的”Linq查询和Rx提供的ToObservable()替代方法。使用Linq我有以下查询哪些作品:
var m = new worldEntities();
var res = m.country.Where(e => e.countrylanguage.Any(i=>i.Language.Equals("German"))).Select(e => e.Name);
但我找不出Rx对应。如果我尝试使用相同的方法
var set = m.country.ToObservable();
set.Where(e => e.countrylanguage.Any(i => i.Language.Equals("German")))
.Select(e => e.Name).Buffer(50).
Subscribe(l=>
Items.AddRange(l));
我会得到一个异常有以下内部消息:
{"There is already an open DataReader associated with this Connection which must be closed first."}
所以我的问题是,应该如何RX查询的样子,来达到同样的效果。
在此先感谢和亲切的问候。
谢谢你,工作。但是,请你解释一下为什么你认为使用RX对数据库来说这是一个非常规的情况?根据这个[link](http://www.aboutmycode.com/reactive-extensions/using-reactive-extensions-for-streaming-data-from-database/)Rx可以简化很多事情,特别是填充UI元素块明智。所以我从你的例子中学到了以下内容。首先创建linqToSQL查询,并让EF做它的魔力,然后将结果转换为IObservable。这是否应该是莽撞方式?再次感谢您的快速回复。 – Akku
AFAIK Rx的东西应该基于推动数据的主动源,这与你的方法不一样。活动源可以基于定期轮询数据库来进行更改并推送,但不会对数据库进行单个查询。 –