使用最新版本的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; }
}
我删除了属性 EmployeeId ,这是Employees表的前导键。我忘了删除&#34; Merge命令&#34;在下面的代码中:
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命令。但是,如果没有对该表的引用,则可以通过忽略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命令,提醒服务堆栈开发人员可能会感兴趣。
答案 0 :(得分:1)
这是按预期工作的,错误消息表明它无法找到可以合并的静态关系,这会违反Merge命令的目的 - 合并相关的结果集。当没有静态定义的关系存在时,这显然是开发人员应该知道的错误,因为他们对API的使用没有按预期工作。
这与在静态类型语言中设置不存在/拼写错误属性相同,即编译器反馈用于捕获开发人员错误。