在Servicestack.OrmLite Sql Server中使用Merge时出错

时间:2015-06-24 04:25:57

标签: servicestack ormlite-servicestack

使用最新版本的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命令,提醒服务堆栈开发人员可能会感兴趣。

1 个答案:

答案 0 :(得分:1)

这是按预期工作的,错误消息表明它无法找到可以合并的静态关系,这会违反Merge命令的目的 - 合并相关的结果集。当没有静态定义的关系存在时,这显然是开发人员应该知道的错误,因为他们对API的使用没有按预期工作。

这与在静态类型语言中设置不存在/拼写错误属性相同,即编译器反馈用于捕获开发人员错误。