我有一个实体类,它是从我的数据库模型自动生成的.这个类继承了ObjectContext,它继承了IDisposable.
我创建了一个存储库,其中包含各种方法,这些方法使用实体对象的单个实例与数据库进行交互.
自动生成的类
public partial class DevEntities : ObjectContext
{
public const string ConnectionString = "name=DevEntities";
public const string ContainerName = "DevEntities";
Run Code Online (Sandbox Code Playgroud)
存储库类
DevEntities db = new DevEntities();
public Customer GetCustomerByID(int id)
{
var customers = db.Customers.FirstOrDefault(c => c.CustomerId == id);
return customers;
}
public Customer GetCustomerByPasswordUsername(string email, string password)
{
var customers = db.Customers.FirstOrDefault(c => c.Email == email && c.Password == password);
return customers;
}
Run Code Online (Sandbox Code Playgroud)
从中您可以看到我对db实例进行了多次引用.我的问题是,我最好在每个方法中实例化一个新的DevEntity,从而能够实现using语句,从而确保正确处理,或者我当前的实现是否正常?
我对Moq完全不熟悉,到目前为止,我们刚刚完成了Pro asp.net框架中概述的示例.在书中,一些crud被放置在控制器中,例如通过id获取客户 - 可能是出于简洁的原因.我决定将这种类型的功能放在存储库中,只需在控制器中调用它,就像"customerRepository.GetCustomerByID(id);" 测试这样的东西的最佳方法是什么?我创建了以下单元测试,由于某种原因,它返回一个null Customer.
List<Customer> customer = new List<Customer>();
customer.Add(new Customer { CustomerId = 1, FirstName = "test", LastName = "wods", Sex = true });
mockRepos = new Moq.Mock<ICustomerRepository>();
mockRepos.Setup(x => x.Customers).Returns(customer.AsQueryable());
CustomersController controller = new CustomersController(mockRepos.Object);
//Act
ViewResult results = controller.Edit(1);
var custRendered = (Customer)results.ViewData.Model;
Assert.AreEqual(2, custRendered.CustomerId);
Assert.AreEqual("test", custRendered.FirstName);
Run Code Online (Sandbox Code Playgroud)
和控制器
public ViewResult Edit(int id)
{
Customer customer = customerRepository.GetCustomerByID(id);
return View(customer); //this just returns null??
}
Run Code Online (Sandbox Code Playgroud)
我想我很傻,但任何帮助都会受到更多的赞赏.
我正在尝试使用lambda表达式根据该对象中的值从列表中删除某个对象.这是我的lambda:
ChartAttributes.ToList().RemoveAll(a => a.AttributeValue.Contains("PILOT"));
Run Code Online (Sandbox Code Playgroud)
这是ChartAttributes列表
IList<IChartAttribute> ChartAttributes
Run Code Online (Sandbox Code Playgroud)
这是上面列表中包含的ChartAttribute对象
public virtual string AttributeKey { get; set; }
public virtual string AttributeValue { get; set; }
public virtual int ChartAttributeId { get; set; }
public virtual int ChartSpecificationId { get; set; }
Run Code Online (Sandbox Code Playgroud)
有一个图表属性,其AttributeKey设置为"PILOT".但这永远不会被删除.我究竟做错了什么?
谢谢
我正在努力让我的头脑进行单元测试.我一直在关注Nerd晚餐和专业asp.net MVC框架的例子,但是一旦我尝试自己很快就会卡住.作为测试,我尝试构建一个仅使用登录信息的验证类 - usename和password从存储库返回用户.我已经使用了这个例子,因为很容易想象一个人可能会执行哪些测试:Is_Password_Valid,Is_Username_Valid等.
我花了很长时间试图让我的头脑得到这个.任何人都可以举例说明他们如何将其作为单元测试吗?我想,一旦我破解了这个,我就会离开.
//Arrange
string email = "test@test.com";
string password = "test";
//Arrange
List<Customer> customer = new List<Customer>();
customer.Add(new Customer { CustomerId = 1, Email = email, Password = "best", FirstName = "test", LastName = "wods", Sex = true });
mockRepos = new Moq.Mock<ICustomerRepository>();
mockRepos.Setup(x => x.GetCustomerByPasswordUsername(email, password)).Returns(customer.First());
Authenticate auth = new Authenticate(mockRepos.Object);
//Act
var result = auth.Login(email, password);
//Assert
//this is where I start to become unstuck??????
Run Code Online (Sandbox Code Playgroud) 我正在用c#编写一个登录类,我正在努力为空密码,密码不足的密码字符等抛出异常.突然发生的事情是 - 我怎么处理这些异常?他们是谁/他们是谁?无论我是否处理异常,该应用程序仍然会失败.是其他开发者的例外,客户!?
我创建了一个我想在页面后面的代码中使用的存储库类.我在代码隐藏页面中使用构造函数注入来实例化存储库.
存储库类:
BritanniaPremierEntities PBEntities = new BritanniaPremierEntities();
public IQueryable<TradeRoutes> GetRoutes()
{
var routes = PBEntities.TradeRoutes.OrderBy(c => c.ConsignmentDate);
return routes;
}
public IQueryable<TradeRoutes> GetExpiredRoutes()
{
var routes = PBEntities.TradeRoutes.Where(
c => c.ConsignmentDate <= System.DateTime.Now);
return routes;
}
Run Code Online (Sandbox Code Playgroud)
代码页面背后
private IRepository repos;
public Admin_TradeRoutesAdmin()
: this(new Repository())
{
}
public Admin_TradeRoutesAdmin(IRepository repos)
{
this.repos = repos;
}
public IQueryable GetTradeRoutes()
{
// call repository method
return repos.GetRoutes();
}
Run Code Online (Sandbox Code Playgroud)
这是我有点困惑的地方.我应该如何确保存储库正确处理?例如,我无法使用代码隐藏页面中的语句来包装存储库调用,从而在存储库中使用dispose方法.
我能够成功创建电子表格,而且我似乎已经通过代码添加了图像,问题是当我打开电子表格时,没有图像.这是我的代码:
public static void CreateSpreadsheetWorkbook(string filepath)
{
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
sheets.Append(sheet);
string sImagePath = @"C:\temp\install_button.png";
DrawingsPart drawingsPart = worksheetPart.AddNewPart<DrawingsPart>();
ImagePart imagePart = drawingsPart.AddImagePart(ImagePartType.Png, worksheetPart.GetIdOfPart(drawingsPart));
using (FileStream stream = new FileStream(sImagePath, FileMode.Open))
{
imagePart.FeedData(stream);
}
workbookpart.Workbook.Save();
spreadsheetDocument.Close();
}
Run Code Online (Sandbox Code Playgroud)
谢谢
斯图
我有一个函数IList<string> someVariable作为参数.我想将其转换为列表,以便我可以按字母顺序对值进行排序.
我该如何实现这一目标?
我有一个查询,其中有一个使用许多局部变量构建的where子句,但这很慢.下面是一个粗略的例子,因为我目前无法访问查询:
declare @a varchar(50), @b varchar(50), @c varchar(50)
set @a = '%'
set @b = 'foo'
set @c = '%bar'
Run Code Online (Sandbox Code Playgroud)
我的where子句是什么样的
where a = @a and b = @b and c =@c
Run Code Online (Sandbox Code Playgroud)
这需要大约1分钟才能运行.但是,如果我直接引用where子句中的值,例如:
where a = '%' and b = 'foo' and '%bar'
Run Code Online (Sandbox Code Playgroud)
大约需要5秒钟.
所以我的问题是,有没有更好的方法来构建我的where子句?需要注意的一件重要事情.where子句中使用了大约10个局部变量,但大多数都设置为默认值%
提前致谢
除了从下拉列表中触发此事件之外,我还希望能够从我的代码中触发它.这有可能吗?如果可以的话怎么样?
谢谢
斯图
c# ×6
idisposable ×2
moq ×2
unit-testing ×2
asp.net ×1
asp.net-mvc ×1
events ×1
ilist ×1
lambda ×1
list ×1
openxml-sdk ×1
repository ×1
sql ×1