我正在尝试解决与此处概述的错误类似的错误:
在.NET实体框架中调用SaveChanges时出现InvalidOperationException
似乎解决方案(我还没有尝试过),将System.Data.Objects.SaveOptions.None作为SaveChanges()方法的SaveOptions参数传递.
所以在我这样做之前,我试图准确理解不同的SaveOptions是如何工作的(None,AcceptAllChangesAfterSave,DetectAllChanges).然而,我无法找到明确的解释,也不确定默认是什么.任何人都可以澄清吗?
谢谢!
更新: 我在这里发布了实际问题:尝试使用EF 4迭代添加对象时出现System.InvalidOperationException
我有两个数组,称为'对象'和'appliedObjects'.我试图用Javascript和/或Angular中的优雅方式将对象从一个数组移动到另一个数组.
最初我做了这样的事情:
$scope.remove = function () {
angular.forEach($scope.appliedObjects, function (element, index) {
if (element.selected) {
element.selected = false;
$scope.objects.push(element);
$scope.appliedObjects.splice(index, 1);
}
});
}
$scope.add= function () {
angular.forEach($scope.objects, function (element, index) {
if (element.selected) {
element.selected = false;
$scope.appliedObjects.push(element);
$scope.objects.splice(index, 1);
}
});
}
Run Code Online (Sandbox Code Playgroud)
但后来我意识到,当从循环数组中删除值时,它不会添加或删除所有其他项,因为它是通过索引进行的.
然后我尝试使用临时数组来保存要添加或删除的项目列表,我开始得到奇怪的参考问题.
我开始关注这个问题的最佳解决方案......任何帮助和/或指导都会非常感激.
我对c#中的反思有点新意.我正在尝试生成所有控制器的列表,以便测试它们是否使用特定的actionfilter进行修饰.编写单元测试时,如何访问测试的组件?
这似乎不起作用:
var myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
Run Code Online (Sandbox Code Playgroud) 问题:我无法访问a中的项目数 SelectList
我有一个返回SelectList的HtmlHelper方法:
public static SelectList FilterSelectList(this HtmlHelper helper, List<Stuff> eList, string dept)
{
List<Stuff> returnList = new List<Stuff>();
//Do Stuff
return new SelectList(returnList, "ID", "Name");
}
Run Code Online (Sandbox Code Playgroud)
然后我进行了测试,确认过滤器已正确完成:
// Arrange
List<Stuff> eList = MVCMocks.GetList();
string dept = "T";
int expectedCount = eList.FindAll(e => e.Dept == dept).Count;
// Act
var actual = HtmlHelpers.FilterSelectList(helper, eList, dept);
// Assert
Assert.AreEqual(expectedCount, actual.Count, "The list was not properly filtered.");
Run Code Online (Sandbox Code Playgroud)
调用会actual.Count导致错误.
我希望这只是我的一个愚蠢疏忽的例子,但我一直在敲打这个问题.证明我是对的!:)
编辑:我试过的东西
actual.Count
actual.Count()
actual.Items.Count()
actual.GetEnumerator().?
Run Code Online (Sandbox Code Playgroud) 我有一个用c#编写的单元测试,它使用.CSV作为数据源:
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\TestData.csv", "TestData#csv", DataAccessMethod.Sequential), DeploymentItem("TxRP.Tests\\TestData.csv"), TestMethod()]
public void CompareOrgsTest()
{
// Arrange
var vdd = new Mock<ViewDataDictionary>().Object;
HtmlHelper helper = MVCMocks.CreateMockHelper(vdd);
string orgOne = testContextInstance.DataRow["OrgOne"].ToString();
string orgTwo = testContextInstance.DataRow["OrgTwo"].ToString();
bool expected = Convert.ToBoolean(testContextInstance.DataRow["OrgCompareExpected"]);
// Act
bool actual = HtmlHelpers.CompareOrg(helper, orgOne, orgTwo);
// Assert
Assert.AreEqual(expected, actual, "Did not return " + expected + ". Org1=" + orgOne + ", Org2=" + orgTwo);
}
Run Code Online (Sandbox Code Playgroud)
工作非常棒,直到我需要添加一些空值测试.我似乎无法弄清楚如何传递NULL值作为数据元素之一...有没有人以前做过这个?
谢谢!
考虑以下代码:
StringBuilder textResults = new StringBuilder();
using(SqlConnection connection = new SqlConnection(GetEntityConnectionString()))
{
connection.Open();
m.Connection = connection;
SqlDataReader results = m.ExecuteReader();
while (results.Read())
{
textResults.Append(String.Format("{0}", results[0]));
}
}
Run Code Online (Sandbox Code Playgroud)
我在数据库上的 Sql Server Mgmt Studio 中使用活动监视器来检查正在发送的确切查询。然后我将该查询文本复制到 SSMS 中的查询编辑器窗口,查询返回了预期的结果。但是,SqlDataReader results始终为空,表示“枚举没有返回结果”。
我的怀疑是以某种方式没有正确返回结果,这让我认为上面的代码有问题,而不是查询本身被传递。
在上面的代码中有什么会导致这种情况吗?还是我忽略了什么?
编辑:
这是 SQLCommand 对象指示的查询:
SELECT DISTINCT StandardId,Number
FROM vStandardsAndRequirements
WHERE StandardId IN ('@param1','@param2','@param3')
ORDER BY StandardId
Run Code Online (Sandbox Code Playgroud)
这是出现在活动监视器中的查询:
SELECT DISTINCT StandardId,Number
FROM vStandardsAndRequirements
WHERE StandardId IN ('ABC-001-0','ABC-001-0.1','ABC-001-0')
ORDER BY StandardId
Run Code Online (Sandbox Code Playgroud)
该查询针对单个视图工作。
当我对数据库运行第二个查询时,它返回了 3 行。
SqlDataReader 指示 0 行。
我有一个有三列的表:
ColumnA ColumnB ColumnC
AAA NULL 123
BBB 222 NULL
CCC NULL NULL
Run Code Online (Sandbox Code Playgroud)
我想创建一个SELECT语句,它将返回ColumnA,然后是第二列,它将显示ColumnB的值,除非ColumnB为null; 否则它将显示ColumnC的值,即使它是NULL.我可以使用IF语句吗?就像是:
SELECT ColumnA,
IF(ColumnB IS NULL, ColumnC, ColumnB)
FROM table
Run Code Online (Sandbox Code Playgroud)
**如果我这样做,下一步将返回连接列的值而不是ColumnB.实际上,IF声明是
IF(table.ColumnB IS NULL, table.ColumnC, table2.ColumnD)
Run Code Online (Sandbox Code Playgroud) 例如:
SqlConnection connection = new SqlConnection(efContext.Connection...?)
connection.Open();
etc..
Run Code Online (Sandbox Code Playgroud) 我试图在C#中针对SQL Server数据库创建参数化查询.
码:
query = new StringBuilder( "SELECT @fields FROM @tables");
using(SqlConnection connection = new SqlConnection(connection))
{
SqlCommand command = new SqlCommand(query.ToString(), connection);
command.Parameters.AddWithValue("@fields", fields.ToString());
command.Parameters.AddWithValue("@tables", tables.ToString());
try
{
connection.Open();
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
奇怪的部分是失败的消息"必须声明表变量"@ tables \".但是正如你所看到的,它已经被明确定义了.
所以我的问题是:
我有一个非常简单的单元测试,用于测试通用List<SelectListItem>.
[TestMethod()]
public void PopulateSelectListWithSeperateTextAndValueLists()
{
//Arrange
SetupDisplayAndValueLists();
bool allOption = false;
//Act
List<SelectListItem> result = ControllerHelpers.PopulateSelectList(valueList, displayList, allOption);
//Assert
Assert.AreEqual(expected, result);
}
Run Code Online (Sandbox Code Playgroud)
断言总是返回 false,即使我已经检查并确认两个对象具有相同的确切值。
当单元测试返回泛型结果时,是否有任何特殊考虑?
更新了新的测试及其状态
Assert.AreEqual(4, result.Count); //passes
Assert.AreEqual(result[0].Text, expected[0].Text, "0 element is not found");//passes
Assert.AreEqual(result[1].Text, expected[1].Text, "1 element is not found");//passes
Assert.AreEqual(result[2].Text, expected[2].Text, "2 element is not found");//passes
Assert.AreEqual(result[3].Text, expected[3].Text, "3 element is not found");//passes
Assert.AreEqual(result[0].Value, expected[0].Value, "0 element is not found");//passes
Assert.AreEqual(result[1].Value, expected[1].Value, "1 element is not found");//passes
Assert.AreEqual(result[2].Value, expected[2].Value, "2 element is not …Run Code Online (Sandbox Code Playgroud) 在短划线(" - ")之后,我有一个带有数字的字符串.我想用这个数字增加1创建相同的字符串.很简单,但我想知道是否有更好的方法呢?谢谢!
string oldString = "BA-0001-3";
int lastIndex = oldString.LastIndexOf("-");
string oldNumber = oldString.SubString(lastIndex + 1);
string oldPartialString = oldString.SubString(0, lastIndex);
int newNumber = Convert.ToInt32(oldNumber) + 1;
string newString = oldPartialString + newNumber.ToString();
Run Code Online (Sandbox Code Playgroud) 我一直试图围绕这个类似问题发布的主题:
是否可以在ASP.NET MVC FilterAttribute上使用依赖注入/ IoC?
但是,我只是没有到达任何地方.更不用说,所有解决方案似乎都依赖于我无法使用的其他库(MvcContrib,Unity).
任何人都可以将一些代码拼凑在一起来解释如何使这个属性注入工作?或者,如果有另一种方法可以实现这一目标?
非常感谢!
相关代码1:控制器
namespace TxRP.Controllers
{
[GetMasterPageData]
public class BaseController : Controller
{
}
}
Run Code Online (Sandbox Code Playgroud)
相关代码2:ActionFilter
public class GetMasterPageData : ActionFilterAttribute
{
private IEmployee emp; //<--Need to inject!
private ICache cache; //<--Need to inject!
/// <summary>
/// ActionFilter attribute which inserts the user name, access level and any error/warning messages to the MasterPage
/// Session variables which are consumed primarily by the LogOnUserControl.
/// The MasterPage will display any warning or error messages.
/// …Run Code Online (Sandbox Code Playgroud) c# ×5
unit-testing ×4
sql ×3
mstest ×2
ado.net ×1
angularjs ×1
arrays ×1
generics ×1
javascript ×1
parameters ×1
reflection ×1
sql-server ×1
string ×1