私はシンプルなベンダー持っている - 次のセットアップ(非関連のプロパティは省略さ)と>製品関係:私は柔らかいこの場合には削除してLeftJoin()
を使用してみましたを使用していServiceStack ORMLite LeftJoin混乱
public class Vendor
{
public Guid Id { get; set; }
public bool IsDeleted { get; set; }
[Reference]
public List<Product> Products {get; set; }
}
public class Product
{
public Guid Id { get; set; }
public bool IsDeleted { get ; set; }
[ForeignKey(typeof(Vendor))]
public Guid VendorId {get; set; }
}
を参照された製品と削除されていない製品のリストを持つベンダーを検索します。私の最初の試みは成功しなかったし、私はLeftJoin()
クエリを使用して参照でエンティティを移入するためにLoadSelect()
を使用しようとしていたことが左の結合の問題だと思う。しかし、実際には、参加者はベンダを特定するために使用されており、LoadSelect()
は、そのベンダのためにプロダクトを設定しました。多くのテストとグーグルの後、私は次のコードを実行しますが、2つのステップのプロセスです。
public async Task<Vendor> GetVendorProductsAsync(Guid vendorId)
{
using (var con = DbFactory.Open())
{
try
{
var vendor = (await con.SelectAsync<Vendor>(v => v.Id == vendorId && !v.IsDeleted)).SingleOrDefault();
if (vendor != null)
{
var products = await con.SelectAsync<Product>(p => p.VendorId == vendorId && !p.IsDeleted);
vendor.Merge(products);
}
return vendor;
}
catch (Exception ex)
{
Log.Error(ex, "{@LastSql}", con.GetLastSql());
throw;
}
}
}
Iは、結合を実行すると、次にORMLiteは、単一ステップでベンダーと参照/濾過製品でエンティティをロードするためにデータベースを使用することを好むだろう。 ORMLiteを使用するとLeftJoin()
を使用して、IsDeleted
がfalseの参照先の製品のみを読み込むことはできますか?
はあなたに感謝します - 1ベンダーあたりの製品数が少ないため、クライアントでの削除はおそらく最も効果的であり、ネットワーク要求を保存します。 –