https://github.com/ServiceStack/ServiceStack.OrmLiteの最新バージョンを使用する
[Schema("dbo")]
[Alias("ShelvingCount")]
public class ShelvingCount: IHasId<int>
{
[Alias("ShelvingCountId")]
[Index(Unique = true)]
[AutoIncrement]
public int Id { get; set;}
[Required]
[References(typeof(Account))]
public int AccountId { get; set; }
[Reference]
public Account Account { get; set; }
[Required]
public DateTime Date { get; set; }
[Required]
public int Quantity { get; set; }
[Required]
public int? Status { get; set; }
}
EmployeesテーブルのforeighキーであるプロパティEmployeeIdを削除しました。そして、私は以下のコードの「マージコマンド」を削除するのを忘れました:
var result = await dbCon.SqlListAsync<ShelvingCount>("EXEC getAllShelvingCounts @accountId, @status, @fromDate, @toDate", new { accountId, status, fromDate, toDate });
// Load the references
var employees = dbCon.Select<Employee>();
result.Merge(employees);
return result;
その後、以下のエラーが発生しました。マージコマンドを削除する必要があることはわかっています。ただし、そのテーブルへの参照がない場合は、Mergeコマンドを無視することで修正できます。
{ResponseStatus:{ErrorCode:Exception,Message:Could not find Child Reference for 'Employee' on Parent 'ShelvingCount',StackTrace:"[AllShelvingCounts: 24/06/2015 4:15:01 AM]:
[REQUEST: {AccountId:0,Status:-1,FromDate:2015-06-22,ToDate:2015-06-24}]
System.Exception: Could not find Child Reference for 'Employee' on Parent 'ShelvingCount'
at ServiceStack.OrmLite.OrmLiteUtils.Merge[Parent,Child](List`1 parents, List`1 children)
at Next.Management.Repository.ShelvingCountRepository.<GetAllShelvingCounts>d__0.MoveNext() in c:\dev\Next\Logistics\Management\src\Management.Repository\Repository\ShelvingCountRepository.cs:line 26
修正する必要がある関連する問題はありますか?
例外が開発者が役に立たないマージコマンドを削除するのに役立つ可能性があることを考慮に入れると、サービススタック開発者に警告することは興味深いかもしれません。
これは意図したとおりに機能しています。エラーメッセージは、マージできる静的な関係が見つからなかったことを示しています。これにより、関連する結果セットをマージするという、Mergeコマンドの目的が無効になります。静的に定義された関係が存在しない場合、APIの使用が意図したとおりに機能していないため、これは明らかに開発者が知っておくべきエラーです。
これは、静的に型指定された言語で存在しない/スペルミスのプロパティを設定するのと同じです。つまり、開発者のエラーをキャッチするためにコンパイラのフィードバックがあります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加