小编Jax*_*ian的帖子

由于一个或多个外键属性不可为空,因此无法更改关系

(注意:即使它有相同的例外,也不这个问题的重复.)

我有一个穷人的交易策略是:

  1. 插入父记录和子记录.
  2. 执行长时间运行.
  3. 如果长时间运行操作失败,请删除先前插入的父记录和子记录.

当我尝试第3步时,收到以下消息:

操作失败:无法更改关系,因为一个或多个外键属性不可为空.当对关系进行更改时,相关的外键属性将设置为空值.如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象.

我一般都明白这意味着什么,但我认为我是按照规则玩的,无论我怎么努力遵守规则,我都不确定为什么我会得到这个消息.

我们使用自我跟踪实体,我的代码实际上是这样的:

var parent = new Parent(1,2,3);
var child = new Child(4,5,6);
parent.Children.Add(child);

MyContext.Parents.ApplyChanges(parent);
MyContext.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);

// At this point, inserts were successful and entities are in an Unchanged state.
// Also at this point, I see that parent.Children.Count == 1

var shouldDeleteEntities = false;
try
{
  // This is not database-related. This process does some
  // encryption/decryption and uploads some files up to
  // …
Run Code Online (Sandbox Code Playgroud)

c# sql-server .net-4.0 entity-framework-4

8
推荐指数
1
解决办法
9616
查看次数

编译解决方案时,MSBuild无法找到SGen

我在这里查看了其他几个与SGen相关的问题,他们的答案都不适用,或者他们的答案不能解决这个问题.我安装了几个SDK来解决这个问题没有运气.不应更改引用类型,因为这是唯一存在问题的地方.一旦建议将SGen.exe放入C:\Windows\Microsoft.NET\Framework\v3.5文件夹,但是这不是在没有问题的框上完成的.在这种情况下,SGen.exe实际存在并且它应该是正确的位置,但MSBuild仍然因为某些原因而遇到问题!

背景:

我们有一个NAnt脚本可以自动化我们的构建.在这种情况下,NAnt正在调用MSBuild,MSBuild正在生成声称无法找到SGen的错误.该项目基于.NET 3.5.我有我的主要开发环境(64位Vista Ultimate),其中脚本完美运行,我试图在VM(64位Win 7旗舰版)中复制它.我认为我已经掌握了一切我应该很好的东西但是在Win7盒子上失败了(在Vista盒子上完美运行).

我在两个盒子之间进行了一些比较,它们在这方面看起来都相同,但它仍然失败了.例如,两个机器上HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFrameworksdkInstallRootv2.0值都设置为C:\Program Files\Microsoft.NET\SDK\v2.0 64bit\.在两台机器中,SGen.exe都在该路径的bin子目录中.

NAnt脚本:

<target name="report-installer" depends="fail-if-environment-not-set">
    <exec program="MSBuild.exe" basedir="${framework35.directory}">
        <arg value="${tools.directory.current}\ReportInstaller\ReportInstaller.sln" />
        <arg value="/p:Configuration=${buildconfiguration.current}" />
    </exec>
</target>
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是这样的:

report-installer:

     [exec] Microsoft (R) Build Engine Version 3.5.30729.4926
     [exec] [Microsoft .NET Framework, Version 2.0.50727.4927]
     [exec] Copyright (C) Microsoft Corporation 2007. All rights reserved.
     [exec]
     [exec] Build started 4/8/2010 11:28:23 AM.
     [exec] Project "C:\Projects\Production\Tools\ReportInstaller\ReportInstaller.sln" on node 0 (default targets).
     [exec] …
Run Code Online (Sandbox Code Playgroud)

.net msbuild nant 64-bit sgen

7
推荐指数
1
解决办法
6678
查看次数

.NET中的嵌套事务

我该如何执行相当于此的操作?我的理解是,使用TransactionScopes这是不可能的,但我想以其他方式完成等价物:

业务逻辑类:

public bool Bar()
{
  try
  {
    using (var tsWork = new TransactionScope())
    {
      ComplicatedDataImportCode(somedata);
      FlagRecordInDatabaseAsImported(); // this is the same record that's modified in the catch
      tsWork.Complete();
      return true;
    }
    catch (DuplicateDataException err)
    {
      // if we got here, the above transaction should have rolled back,
      // so take that same record in the database and update it to "Duplicate".
      FlagSameRecordInDatabaseAsDuplicate(err.Message);
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

现在这很好用,直到我将所有这些封装在一个事务中(也许是我想在执行断言后回滚的集成测试).

简单测试证明我的观点:

public void CanTest()
{
  // Arrange
  var foo = …
Run Code Online (Sandbox Code Playgroud)

.net transactions .net-4.0 sql-server-2008-r2

7
推荐指数
1
解决办法
2472
查看次数

从字符串中获取最后一组数字,进行数学运算,重建为字符串?

我有一个代表"帐号"的字段,大多数情况下只是一个数字.我需要对这些"数字"进行一些自动递增.显然不适合做数学.我们决定为我们工作的规则是,我们希望找到最右边的数字组,并将它们自动递增一个并返回重建的字符串(即使这使得它更长一个字符).

这些数字的一些例子是:

  • AC1234 - > AC1235
  • GS3R2C1234 - > GS3R2C1235
  • 1234 - > 1235
  • A-1234 - > A-1235
  • AC1234g - > AC1235g
  • GS3R2C1234g - > GS3R2C1235g
  • 1234克 - > 1235克
  • A-1234g - > A-1235g
  • 999 - > 1000
  • GS3R2C9999g - > GS3R2C10000g

我正在使用C#/ .NET 4.0.我将Regex列为标签,但这不是必需的.此解决方案不必是正则表达式.

有什么好想法吗?理想的性能不是主要问题.除非它全部包含在正则表达式中,否则我宁愿拥有清晰易懂的代码.

谢谢!

c# regex .net-4.0

7
推荐指数
1
解决办法
4125
查看次数

如何在EF4中回滚单元测试TearDown?

在我关于在EF4中回滚交易的研究中,似乎每个人都参考了这篇博文或提供了类似的解释.在我的场景中,我想在单元测试场景中执行此操作,我想在我的单元测试上下文中回滚几乎我所做的一切,以防止更新数据库中的数据(是的,我们会增加计数器但是没关系).为了做到这一点,最好遵循以下计划吗?我错过了一些概念或其他任何重要的概念(除了我SetupMyTestPerformMyTest函数不会真的存在这种方式)?

[TestMethod]
public void Foo
{
  using (var ts = new TransactionScope())
  {
    // Arrange
    SetupMyTest(context);

    // Act
    PerformMyTest(context);
    var numberOfChanges = context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
    // if there's an issue, chances are that an exception has been thrown by now.

    // Assert
    Assert.IsTrue(numberOfChanges > 0, "Failed to _____");

    // transaction will rollback because we do not ever call Complete on it
  }
}
Run Code Online (Sandbox Code Playgroud)

c# unit-testing entity-framework transactions vs-unit-testing-framework

6
推荐指数
1
解决办法
2417
查看次数

TFS 2010中的禁止模式登记政策

我一直在尝试使用TFS 2010 Power Tools的Forbidden Patterns部分而我只是不理解某些东西 - 我试图使用它时根本无法改变任何东西!我正在使用最近发布的版本(我相信2010年4月23日),所以它不是旧版本.

首先,是的,我知道它是基于正则表达式的,所以让我们明白这个疑问......

我试图阻止以下场景:

1)我修改了所有T4 EF模板以生成名为的文件EntityName.gen.cs.然后我试图阻止TFS想要检查那些文件.我使用正则表达式\.gen\.cs\z并没有改变一件事!我甚至没有\z和nadda一起尝试过!

2)我不希望默认情况下签入app.config和web.config文件,因为我们将这些内容存储到app.config.base和web.config.base文件中,我们的构建脚本用它来生成我们的-environment app.config和web.config文件.因此,我尝试了以下正则表达式,再次,没有任何作用!web\.config\z,app\.config\z,web\.release\.config\zweb\.debug\.config\z.

我搞砸了这个是什么东西?

regex tfs visual-studio-2010 tfs-power-tools

6
推荐指数
2
解决办法
4160
查看次数

使用名称中的连字符处理MVC2变量

我正在使用一些第三方软件,它们在名称中创建带有连字符的查询字符串参数.我正在研究这个问题,似乎他们的解决方案非常接近我需要的东西,但我对基础MVC的东西太无知了,想弄清楚如何调整它来做我需要的东西.理想情况下,我想简单地用下划线替换连字符,这将是一个很好的解决方案.如果有一个更好的,那么我有兴趣听到它.

我想要处理的URL的一个例子是:

http://localhost/app/Person/List?First-Name=Bob&My-Age=3
Run Code Online (Sandbox Code Playgroud)

使用此控制器:

public ActionResult List(string First_Name, int My_Age)
{
    {...}
}
Run Code Online (Sandbox Code Playgroud)

重复一遍,我无法更改生成的查询字符串,所以我需要以某种方式支持它与我的控制器.但是怎么样?

作为参考,下面是自定义RouteHandler,用于处理控制器名称中的下划线和上面引用的SO问题中的操作名称,我们可以修改它以实现我想要的:

public class HyphenatedRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler  GetHttpHandler(RequestContext requestContext)
    {
        requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
        requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
        return base.GetHttpHandler(requestContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-routing asp.net-mvc-2

6
推荐指数
1
解决办法
1302
查看次数

如何在本地/本地托管Azure辅助角色?

一些背景......

我们第一次冒险进入Azure,并试图以婴儿步骤进行.目前,我们的第一个应用程序将成为工作者角色,监视队列以处理请求(例如发送电子邮件或执行一些屏幕抓取),我们只需从我们的内部部署MVC应用程序和WCF服务插入队列.我们稍后会将MVC应用程序和WCF服务移至Azure.

我们的开发工作流程基本上是这样的(稍微修改一些不重要的方式):

  1. 在本地和一些共享服务器上开发.检查源代码管理.
  2. 每15分钟,构建服务器构建并部署到"开发"环境(如果我们需要达到本地以外的"开发"环境,则可以兼作CI和覆盖)
  3. 技术测试人员手动触发构建服务器以将最后成功的"Dev"构建部署到测试环境(或者替代地,先前部署的测试构建,包括/排除数据库).
  4. 技术测试人员和业务测试人员手动触发构建服务器,以将最后成功的"测试"构建(或者,之前部署的测试构建,包括/排除数据库)部署到QA环境.
  5. 在某些时候,我们合并了QA批准部署的变更集.
  6. 之后,我们的生产构建服务器将此版本部署到暂存,然后再部署到我们的生产环境(我们在并行/独立环境中托管N次).

正如您所知,我们有许多内部托管版本的应用程序,供内部支持人员在达到生产之前进行攻击.我希望这些对Azure的依赖程度相当低.我不需要完成服务器依赖性,所以我们将继续使用Azure队列和其他一些机制,因为它们很容易继续使用,但我们不希望我们的构建服务器必须部署到Azure对于这些环境中的每一个(并且支付所有托管费用).

那么,我们如何才能合理地在我们实际测试部署到Azure的代码的方式上部署我们的工作者角色内部部署?

建议的一个选项是我们将worker角色创建为包装器/外观,并在类库中完成所有实际工作,这是我们的计划.但是,允许我们"托管"这一操作的后续操作是创建第二个包装器/外观应用程序,它执行与工作者角色相同的工作,只是以我们可以将其作为计划任务或窗口运行的方式服务器.最终,我不喜欢这个选项,因为整个项目在进入分段之前从未进行过测试.

是否有可能在我们创建第二个包装器/外观应用程序时执行类似的操作,而不是调用它实际引用的类库并调用Run()worker角色中的函数?

c# azure azure-worker-roles

6
推荐指数
1
解决办法
6388
查看次数

自动部署到Azure模拟器?

如何自动部署到Azure Compute Emulator?

我们正在设置内部QA环境以"托管"我们的Azure应用程序进行测试,并决定尝试通过Azure Compute Emulator执行此操作.(目前,我们正在为这些环境使用Azure存储(在线),但我们稍后可能决定在本地托管存储组件.但这是另一个问题.)

我看到一些很棒的工具可以自动部署到在线Azure,例如Windows Azure平台PowerShell Cmdlet甚至一些听起来很棒的付费选项.但是,我看到绝对没有人谈论这些用于QA目的的内部托管.我意识到一个明显的选择是在本地部署Azure项目时在本地shell项目中托管功能(例如工作者角色的Windows服务),但我们选择沿着Azure模拟器的路线前进.

因此,我们如何自动部署到模拟器?VS2010显然可以部署到它,所以它必须是可能的.

PS我们现在正在使用TeamCity,但这可能会改变.但这应该不重要.我希望这个部署主要基于脚本,所以我们可以使用任何构建软件.

azure azure-compute-emulator

6
推荐指数
1
解决办法
2553
查看次数

如何更改我的WCF的FederationMetadata.xml文件以进行各种部署?

我们有一个ADFS 2.0安装,适用于我们各种环境中的MVC应用程序.我相信它使用"被动身份验证"(我仍然习惯于正确的术语) - 如果用户未登录并且adfs将用户重定向回我们的MVC应用程序,它肯定会将用户重定向到我们的adfs代理一旦他们登录.

我们现在开始公开一些安全的Web服务,并希望利用这个相同的身份验证系统.我的理解是,我想用它ws2007FederationHttpBinding作为我的绑定来做到这一点.我相信我有我的WCF的web.config所有设置,但我的斗争现在围绕FederationMetadata.xml文件.

看一下这个文件,我看到一些显然需要改变的东西,比如entityID="http://localhost/UserServices"证书.然后有些事我不知道它们是什么,是否需要改变,例如EntityDescriptor ID="_2b510fe8-98b8......<ds:SignatureValue>CZe5mEu19/bDNoZrY8f6C559CJ........

在哪里可以更好地了解如何为各种环境管理此文件?我有以下托管这些服务的环境,我们将以这种或那种方式进行部署:

  1. 各个开发人员工作站(现在是3倍,之后更多)
  2. 针对这些服务编写应用程序但不一定修改服务的人员的共享开发环境
  3. QA
  4. 分期
  5. 生产(具有不同证书/域/等的3种不同环境)

因此,我们有一个相当简化的流程,使用转换和查找/替换某些令牌来管理不同环境中的web.config文件,因此我想对此xml文件执行相同的操作.因此,最终,我正在寻找的是在FederationMetadata.xml为各种环境管理此文件时需要进行哪些更改.

我当前的FederationMetadata.base.xml文件在下面,我相信这是正确的(我只需要名称/角色),我只需要智能地替换各种令牌,例如~RootServiceUrlTokenToReplace~,在这里:

<?xml version="1.0" encoding="utf-8"?>
<EntityDescriptor ID="~EntityDescriptorIdTokenToReplace~" entityID="http://~RootServiceUrlTokenToReplace~" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
      <ds:Reference URI="#~ReferenceURITokenToReplace~">
        <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
        <ds:DigestValue>~DigestValueTokenToReplace~</ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>~SignatureValueTokenToReplace~</ds:SignatureValue>
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
      <X509Data>
        <X509Certificate>~CertificateTokenToReplace~</X509Certificate>
      </X509Data>
    </KeyInfo>
  </ds:Signature>
  <RoleDescriptor xsi:type="fed:ApplicationServiceType" protocolSupportEnumeration="http://schemas.xmlsoap.org/ws/2005/02/trust http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fed="http://docs.oasis-open.org/wsfed/federation/200706">
    <KeyDescriptor use="encryption">
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <X509Data> …
Run Code Online (Sandbox Code Playgroud)

wcf web-services federated-identity adfs2.0

6
推荐指数
1
解决办法
4149
查看次数