2017-04-06 4 views
2

結合を含むクエリの結果に基づいて、テーブルの特定のフィールドの更新を行いたいとします。 ServiceStackでOrmLiteを使用する。ServiceStackでOrmLiteを使用してJOINクエリに対してUPDATEを実行できますか?

次のように私のクラスには、次のとおりです。次のコードで参加のアップデートやろうとし

public class Document 
{ 
    public int Id { get; set; } 
    public string BCL_Code { get; set; } 
    public bool IsActive { get; set; } 
    public int DocumentTypeId { get; set; } 
} 

public class DocumentType 
{ 
    public int Id { get; set; } 
    public string TypeName { get; set; } 
} 

var q = db.From<Document>() 
    .Join<Document, DocumentType>(
     (doc, type) => doc.DocumentTypeId == type.Id) 
    .Where(d => d.BCL_Code == "FR49") 
    .And<DocumentType>(t => t.TypeName == "Enrollment Process"); 

db.UpdateOnly(new Document { IsActive = false }, onlyFields: q); 

を私は特定のフィールドを更新することができます知っている、そしてどのように私が知っています結合を行いますが、クエリに結合を含めてからUpdateOnlyを実行すると、db.UpdateOnly行にエラーメッセージが表示されます。

マルチパート識別子 "DocumentType.TypeName"をバインドできませんでした。

結合クエリの更新は可能ですか? もしそうなら、それを行う正しい方法は何ですか?

答えて

1

OrmLiteのテーブルからの更新用の型付きAPIはまだありません。それにはadd a feature requestがあります。カスタムSQLを使用することができる一方

、例えば:

db.ExecuteSql(@"UPDATE Document SET IsActive = @isActive 
    FROM Document d 
     INNER JOIN DocumentType t ON (d.DocumentTypeId = t.Id) 
    WHERE d.BCL_Code = 'FR49' 
    AND t.TypeName = 'Enrollment Process'", 
    new { isActive = false }); 
+0

おかげで、Mythz。迅速な対応に感謝します。 – RichHosek

関連する問題