私はちょうどefとrxの使用に慣れようとしています。残念ながら、私は解決できない問題に遭遇しました。私はworld.sqlと呼ばれるMySQL用のテストデータベースを持っています。 EFは以下を生成しましたRXエクステンション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; }
私は今、Rxが提供する "単純な" LinqクエリとToObservable()代替を比較しようとしていました。
var m = new worldEntities();
var res = m.country.Where(e => e.countrylanguage.Any(i=>i.Language.Equals("German"))).Select(e => e.Name);
しかし、私は受信の対応を把握することはできません。LINQのを使用して、私は作品次のクエリを持っています。私は同じアプローチに
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はデータをプッシュするアクティブなソースに基づいている必要がありますが、あなたのアプローチではそうではありません。アクティブソースは、定期的なポーリングDBに基づいて変更を行い、それをプッシュすることができますが、DBへの単一のクエリでは実行できません。 –