【问题标题】:AutoIncrement on SubmitChanges in RIA ServicesRIA 服务中提交更改的自动增量
【发布时间】:2012-07-03 07:04:08
【问题描述】:

我在 Silverlight 5 中使用带有实体框架的 RIA 服务。我有一个以下 Foo 表;

食人魔
FooName
FooCode
FooRef

Fooid 是一个自动递增的数字 - 在保存时就像一个魅力 ...
FooName 在 ViewModel 中设置 - 在保存时工作正常 ...
FooCode 是一个 3 个字母代码例如GRN、SIP、XYZ ...这也在 ViewModel 中设置..没问题
FooRef 是一个递增整数。例如服务器上一次保存的值是 100,现在下一次保存应该是 101。

我对如何获得这个最新号码有点困惑。我研究了一下,发现了两种方法,但我对使用这些方法感到困惑,需要帮助如何实现。

First Method
从 ViewModel,我可以从 RIA 服务调用一个 INVOKE,它可以为我提供最后保存的FooRef int。我可以将它加 1 并在 SubmitChanges 上传递值。
Problem with First Method : 我使用这种方法面临的问题是,假设有 3 个用户在不同位置的工作站上。他们都开始创建一个新的Foo,当他们调用invoke方法时,他们都将被赋予相同的值,这打破了整个概念。

Second Method
我以某种方式拦截服务器上的 Add 方法,可能是通过 Repository,并在添加此实体并提交更改之前获取 FooRef 的值。

谁能帮忙?

【问题讨论】:

    标签: c# silverlight wcf-ria-services auto-increment submitchanges


    【解决方案1】:

    您应该允许您的数据库为您的 Foo 记录分配身份,而不是试图猜测要提供的身份。在多用户系统中几乎是不可能完成的任务。

    使用 WCF RIA 服务保存实体时,您可以获得由以下人员分配的标识:

    riaContext.SubmitChanges ( (op) =>
      {
        if (!op.HasError)
        {
          var identityAdded = ((Entity) op.ChangeSet.FirstOrDefault()).GetIdentity();
        }
      }
    

    【讨论】:

    • 感谢您的建议,但我们对自定义起始数字有疑问。例如我的客户可能只想从 1000 开始,而不是 1。而且我还提供了一个选项,可以跳过一个系列。例如最后一个“FooRef”是 34,他们可能只是决定跳到 100,然后从 101 开始……还有什么想法吗?
    • 基本上你希望 FooRef 是唯一的。所以我会在数据库中创建一个唯一的约束来保护 FooRef。另一种方法可能是在您的模型上使用验证。这意味着如果其他人使用 FooRef 为 100 并且在保存时您会遇到验证失败,然后可以手动解决。
    • 我尝试在数据库中使用唯一约束,但我已经有一个用作主键,并且在有两个唯一标识符时出现数据库错误。
    【解决方案2】:

    最后,我只是继续使用 Invoke 方法,并在调用回调函数中,我最终将上下文提交给服务器。

    context.GetAssignedFooRef((op =>
            {
              entityNewFoo.FooRef = op.Value; // assign return int to FooRef
    
              context.Foo.Add(entityNewFoo);
              context.SubmitChanges();
             }
    

    这就是我解决问题的方式,我不知道它是否是一个理想的解决方案,甚至接近它,但它对我有用。我面临的唯一问题是,如果有另一个用户在第一个保存之前从调用中寻找 FooRef。这是验证开始的地方,如果数据库中存在相同的 FooRef,我将请求一个新的 FooRef。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-15
      • 2011-06-08
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多