我有一个项目作为参考添加到System.Web.
但是,它似乎无法拿起HttpContext.这样做:
Imports System.Web
_ApplicationBase = HttpContext.Current()
Run Code Online (Sandbox Code Playgroud)
告诉我没有声明HttpContext.如果你看一下System.Web里面的方法和属性几乎没有任何显示:只有AspHostingPermission,AspHostingPermissionAttribute,AspHostingPermissionLevel和Services.
引用有效并指向正确的位置.这让我发疯了 - 我错过了什么?
干杯,马特
我们正在采用MongoDB来构建新的解决方案,目前正在尝试根据我们的需求设计最有效的数据模型,并考虑数据项之间的关系.
我们必须在用户,项目和列表之间保持三方关系.用户可以拥有许多项目和许多列表.列表将包含一个用户和多个项目.一个项目可以属于许多用户和许多列表.后者尤其重要 - 一个项目可能属于潜在的大量列表:数千,当然可能数十或数十万.未来可能甚至是数百万.我们需要能够在两个方向上导航这些关系:例如,获取列表中的所有项目或项目所属的所有列表.我们还需要解决方案是通用的,以便我们可以在需要时添加更多类型的文档和关系.
所以似乎有两种可能的解决方案.第一种是数据库中的每个文档都有一个由一系列ID组成的"关系"集合.因此,列表文档将具有包含所有项的ID的项目的关系集合以及具有用户的单个ID的关系集合.在此模型中,当项目属于许多,许多用户或许多列表时,这些数组将变得庞大.
第二个模型需要一种新类型的文档,一个"关系"文档,用于存储每个合作伙伴的ID和关系名称.这会整体存储更多数据,因此会影响磁盘空间.在NoSQL中,它看起来像是一种"不自然"的方法来解决这个问题.
性能方面,空间方面,架构方面,这更好,为什么?
干杯,马特
在控制器操作中,这些变量:
var foo = Request.HttpContext.Features.Get<IRequestCultureFeature>()
.RequestCulture.Culture;
var bar = Thread.CurrentThread.CurrentCulture;
Run Code Online (Sandbox Code Playgroud)
两人皆归"en"。它们之间有什么区别,在确定浏览网站的用户的语言方面哪个更好?
所以我正在使用外部数据提供程序在我们用nHibernate控制的数据库上进行邮政编码查找.这涉及调用存储过程并提供邮政编码.作为回报,我得到了许多行,每行包含构成地址部分的多个列.
我们有一个地址DTO.但我正在努力解决如何将DB结果转换为此对象,因为它没有映射到数据库中的任何内容.我这样做:
Dim spCall As String = String.Format("exec AddressFindListPostCode '{0}'", postcode)
Dim tran As Global.NHibernate.Transform.IResultTransformer = Global.NHibernate.Transform.Transformers.AliasToBean(GetType(Concrete.Cms.DataTransferObjects.Address))
Dim streetList As IList(Of Concrete.Cms.DataTransferObjects.Address) = session.CreateSQLQuery(spCall).SetResultTransformer(tran).List(Of Concrete.Cms.DataTransferObjects.Address)()
Run Code Online (Sandbox Code Playgroud)
但是,如果没有某种映射的帮助,它当然不能将结果集转换为对象.
问题本质上是SP返回一个对象列表.每个对象(相当于一行)包含对应于行内列的子对象.但我认为无法获得子对象.streetList(i,j)不起作用,streetList上没有允许我访问它们的方法或属性.
如何获取数据以进行映射?
干杯,马特
希望有人可以提供帮助,这让我发疯。
我有一个从父对象继承的类,它覆盖了该对象的一些方法。覆盖之一中的相关代码如下所示(我已经删除了正确运行的代码):
public override void Initialise()
{
if (Url != null)
{
_logger.LogInfo("Initialising for file " + Url);
// call the base Initialise method
try
{
base.Initialise();
}
catch (Exception ex)
{
_logger.LogError("Error on initialise : ", ex);
}
}
}
Run Code Online (Sandbox Code Playgroud)
记录器对象写入我们的应用程序日志数据库。
当它第一次到达代码中的这一点时,它会在初始化时记录错误,并给我一个未设置为对象错误实例的对象引用。但是没有进一步的信息,没有内部异常,也没有行号。
我想知道基数是否有可能为空?这看起来很奇怪而且不太可能,但我无法解释为什么没有进一步的信息以及为什么代码拒绝了我从中获取更多信息的所有尝试。
它在实时服务器上,所以我无法单步执行,也无法在测试服务器上复制错误。如果有人对我如何获得有关哪里以及如何出错的更多详细信息有任何想法,我们将不胜感激。
干杯,马特
构建了一个自定义IDataReader,它在XML中查找与特定元素名称匹配的值,如果找到,则返回值.GetValue函数 - 必须返回由接口指定的Object,如下所示:
public object GetValue(int i)
{
string SearchString = _columns[i];
var searchedAttributeValue = from nm in _el.Attributes(SearchString) select nm;
if (searchedAttributeValue.Count() > 0)
{
return ParseTypes(searchedAttributeValue.First().Value);
}
var searchedElementValue = from nm in _el.Elements(SearchString) select nm;
if (searchedElementValue.Count() > 0)
{
return ParseTypes(searchedElementValue.First().Value);
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这不会构建,因为它可能在没有有效返回的情况下到达函数的末尾.
在这种情况下,如果发生这种情况,则意味着存在配置错误 - 用户正在寻找XML中不存在的元素或属性.
我发现(这对我来说是新的)你可以通过这样做解决问题:
public object GetValue(int i)
{
if (_el == null)
{
_el = XNode.ReadFrom(_reader) as XElement;
}
string SearchString = _columns[i];
var searchedAttributeValue = from nm in _el.Attributes(SearchString) select …Run Code Online (Sandbox Code Playgroud) 给定这样的函数:
public void AddItem( int itemId )
{
if(itemId > 0)
{
Item i = new Item;
i.ItemID = itemId
i.DateChanged = DateTime.Today
_repository.Items_Add(i);
_repository.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
Items_Add是一个void函数,它只检查实体框架以查看是否需要添加或附加/修改传递的Item并执行相应的作业.
我想使用Moq验证是否已调用"Items_Add",并使用预期的对象.
但是,如果我在我的测试中这样做:
[TestMethod]
public void Assert_AddItem_AddsValidItem
{
Mock<IRepository> repMock = new Mock<IRepository>();
MyViewModel mvm = new MyViewModel(repMock.Object);
mvm.AddItem(1);
Item testItem = new Item();
testItem.ItemID = 1;
testItem.DateChanged = DateTime.Today;
repMock.Verify(m => m.Items_Add(testItem), Times.Once);
}
Run Code Online (Sandbox Code Playgroud)
测试(不出意外)未能声明该功能未按预期调用.
我假设这是因为我在测试中创建的对象"testItem"与AddItem中创建的对象"i"不同,即使它们在功能上是相同的.
如果这是正确的(请告诉我,如果不是),如何使用Moq验证函数是否已被调用并且按预期工作?鉴于Items_Add没有返回任何内容,我不确定是否可以使用Moq直接测试它(使用等同于"返回"构造的东西).
public class TestObject
{
string TestValue { get; set; }
bool IsDuplicate { get; set; }
}
List<TestObject> testList = new List<TestObject>
{
new TestObject { TestValue = "Matt" },
new TestObject { TestValue = "Bob" },
new TestObject { TestValue = "Alice" },
new TestObject { TestValue = "Matt" },
new TestObject { TestValue = "Claire" },
new TestObject { TestValue = "Matt" }
};
Run Code Online (Sandbox Code Playgroud)
想象testList实际上是数百万个物体.
什么是确保两个这三个最快的方法TestObjects用TestValue的马特获取其IsDuplicate设置为true?无论给定值的实例如何,只有一个应该在IsDuplicate为false的过程中出现.
我并不反对通过线程来做这件事.如果将集合转换为其他集合类型更快,则集合不必是列表.
我需要保留重复项并将其标记为这样,而不是从集合中删除它们.
要扩展,这是(正如您可能想到的)一个更复杂问题的简单表达.有问题的对象已经有了一个序数,我可以使用它来订购它们.
在确切的字符串相等性上匹配初始重复之后,我将不得不再次返回该集合并使用一些模糊匹配逻辑重新尝试其余部分.在重复数据删除期间或之后,不会更改此过程开始时存在的集合. …
我正在尝试对我们的实体框架模型进行一些更改,这会给我带来巨大的麻烦 - 我们的想法是将两个数据库之间的1:1关系转换为多对多关系.如果您在EF中进行更改然后重建数据库,则它生成的用于表示此关系的对象 - 不出所料 - 是一个EntityCollection而不是单个类型对象.
目前,我已经完成了此更改生成的所有错误,并将DatabaseObject引用更改为DatabaseObject.ElementAt(0),以便我可以构建它.然而,一组引用似乎没有给我EntityCollection上的扩展方法,允许一个人对一个集合进行操作 - 比如ElementAt(),Select(),First()等等,我看不出为什么.
在有效的实例中,对象是从基类生成的,然后继承该基类:
_task = _customersRepository.GetDeepTask(taskId);
_customerService = _task.CustomerServiceFeature.CustomerService;
//then in class which inherits above code
string conStr = customerService.DatabaseObject.ElementAt(0).GetConnectionString(_customerService);
Run Code Online (Sandbox Code Playgroud)
但是在没有给我扩展方法的实例中,它是这样生成的:
public void Execute(ScheduledTask task)
{
CustomerService service = task.CustomerServiceFeature.CustomerService;
//this errors and doesn't offer extension methods
string ConnectionString = service.DatabaseObject.GetConnectionString(service);
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这两个实例表现不同?
干杯,马特
挣扎着可能是一个非常简单的问题.我有这样的查询:
;WITH rankedData
AS ( -- a big, complex subquery)
SELECT UserId,
AttributeId,
ItemId
FROM rankedData
WHERE rank = 1
ORDER BY datEventDate DESC
Run Code Online (Sandbox Code Playgroud)
子查询旨在获取大量的内联数据并按itemId和date排名,因此上述查询中的rank = 1可确保我们只获得按日期排序的唯一ItemIds.分区是:
Rank() OVER (partition BY ItemId ORDER BY datEventDate DESC) AS rk
Run Code Online (Sandbox Code Playgroud)
问题是,我想要的是每个UserID的前75个记录,按日期排序.看到我已经在我的子查询中有一个排名来按日期排序项目重复,我看不到这样做的简单方法.
干杯,马特
c# ×5
.net ×3
asp.net ×1
asp.net-core ×1
collections ×1
duplicates ×1
httpcontext ×1
localization ×1
logging ×1
mocking ×1
mongodb ×1
moq ×1
nhibernate ×1
nosql ×1
null ×1
return ×1
sql-server ×1
t-sql ×1
unit-testing ×1