我正在尝试在我的Windows窗体应用程序中实现IoC.我的选择落在Simple Injector上,因为它快速而轻巧.我还在我的应用程序中实现了工作单元和存储库模式.这是结构:
DbContext:
public class MemberContext : DbContext
{
public MemberContext()
: base("Name=MemberContext")
{ }
public DbSet<Member> Members { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();\
}
}
Run Code Online (Sandbox Code Playgroud)
型号:
public class Member
{
public int MemberID { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
GenericRepository:
public abstract class GenericRepository<TEntity> : IGenericRepository<TEntity>
where TEntity : class
{
internal DbContext context;
internal DbSet<TEntity> dbSet;
public GenericRepository(DbContext context)
{
this.context = context; …Run Code Online (Sandbox Code Playgroud) c# entity-framework inversion-of-control repository-pattern simple-injector
通常我正在使用此代码
Member member = ctx.Members.Find(id);
member.Name = txtName.Text;
ctx.Entry(member).State = EntityState.Modified;
ctx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
当我想使用实体框架更新模型时.我在SO上找到了一个不用于EntityState.Modified更新模型的示例.我试图删除该行,它仍在工作.什么是利弊使用EntityState.Modified而不使用EntityState.Modified?
注意:我在WinForms中使用Entity Framework 6 Code First
为什么我不能在生产服务器中使用$ {basedir} nlog.config?如果我使用fileName="${basedir}/logs/${shortdate}.log",nlog不会记录消息信息,但是如果我改为类似fileName="C:/logs/${shortdate}.log"它会记录消息信息
我的nlog.config:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="f" />
</rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)
控制器:
public class HomeController : Controller
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public ActionResult Index()
{
logger.Debug("Test NLog");
return View();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用EntityFramework作为DataLayer和DTO在层之间传输数据.我在N-Tier架构中开发Windows窗体,当我尝试在BLL中从Entity映射到DTO时:
public IEnumerable<CategoryDTO> GetCategoriesPaged(int skip, int take, string name)
{
var categories = unitOfWork.CategoryRepository.GetCategoriesPaged(skip, take, name);
var categoriesDTO = Mapper.Map<IEnumerable<Category>, List<CategoryDTO>>(categories);
return categoriesDTO;
}
Run Code Online (Sandbox Code Playgroud)
我有这个错误:http: //s810.photobucket.com/user/sky3913/media/AutoMapperError.png.html
该错误表示我缺少类型映射配置或不支持的映射.我已经在UI层以这种方式使用配置文件注册了映射:
[STAThread]
static void Main()
{
AutoMapperBusinessConfiguration.Configure();
AutoMapperWindowsConfiguration.Configure();
...
Application.Run(new frmMain());
}
Run Code Online (Sandbox Code Playgroud)
和AutoMapper配置在BLL中:
public class AutoMapperBusinessConfiguration
{
public static void Configure()
{
Mapper.Initialize(cfg =>
{
cfg.AddProfile<EntityToDTOProfile>();
cfg.AddProfile<DTOToEntityProfile>();
});
}
}
public class EntityToDTOProfile : Profile
{
public override string ProfileName
{
get { return "EntityToDTOMappings"; }
}
protected override void Configure()
{ …Run Code Online (Sandbox Code Playgroud) 我有一个布尔字段,如一个标志,表示在表中删除或不删除行.它使用复选框显示,因此如果数据已被删除,则复选框值为true,反之亦然.
下面是显示表格的代码:
<table id="tblEvent" class="display" cellspacing="0" style="width: 100%">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.PIC)</th>
<th>@Html.DisplayNameFor(model => model.Name)</th>
<th>@Html.DisplayNameFor(model => model.StartDate)</th>
<th>@Html.DisplayNameFor(model => model.Status)</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.PIC)</td>
<td>@Html.DisplayFor(modelItem => item.Name)</td>
<td>@Html.DisplayFor(modelItem => item.StartDate)</td>
<td>@Html.EditorFor(modelItem => item.Status)</td>
</tr>
}
</tbody>
</table>
$(document).ready(function () {
$("#tblEvent").dataTable({
"order": [[1, "desc"]]
});
});
Run Code Online (Sandbox Code Playgroud)
在表格中,我可以单击复选框,但我不知道如何处理click事件,因为我正在使用数据表来显示数据.如何使用datatable处理复选框事件?
使用knockout将日期值绑定到文本框时出现问题,如下图所示

当第一次加载页面时,我使用ajax来获取AccountStatements数据.
function AccountStatementViewModel(companyID) {
var self = this;
...
var AccountStatement = {
AccountStatementID: self.AccountStatementID,
CompanyID: self.CompanyID,
Description: self.Description,
Amount: self.Amount,
ReceiptDate: self.ReceiptDate,
Type: self.Type
}
self.AccountStatement = ko.observable();
self.AccountStatements = ko.observableArray();
$.ajax({
url: webroot + 'AccountStatement/GetAccountStatements',
contentType: 'application/json; charset=utf-8',
data: { id: self.CompanyID },
cache: false
}).done(function (data) {
self.AccountStatements(data);
});
...
self.edit = function (accountStatement) {
$('#lnkAddAccountStatement').hide('blind', 1000);
$('#pnlAddEditAccountStatement').show('blind', 1000);
self.AccountStatement(accountStatement);
}
...
}
Run Code Online (Sandbox Code Playgroud)
Controller在json中返回结果:
public JsonResult GetAccountStatements(int id)
{
var accountStatementsVM = db.AccountStatements
.Where(a => a.CompanyID …Run Code Online (Sandbox Code Playgroud) 我已经阅读了本文中的 IDisposable模式,并希望在我的Windows窗体应用程序中实现它.我们知道在windows表单.Designer.cs类中已经存在Dispose方法
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Run Code Online (Sandbox Code Playgroud)
在.cs类我正在使用Typed Dataset来读取和保存数据.
public partial class frmCustomerList
{
private MyTypedDataSet ds = new MyTypedDataSet();
...
}
Run Code Online (Sandbox Code Playgroud)
那么,如何实现IDisposable配置MyTypedDataSet?如果我IDisposable在frmCustomerList中实现并实现其接口
public partial class frmCustomerList : IDisposable
{
private MyTypedDataSet ds = new MyTypedDataSet();
void Dispose()
{
ds.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
那么Dispose(bool disposing).Designer.cs中的方法呢?
我有多个表单,每个表单都有一个拖放区。我已根据此链接成功启动了 dropzone 。
var myDropzoneTheFirst = new Dropzone(
'#form1',
{
url : "upload1",
paramName: 'postedFile',
addRemoveLinks: true,
dictDefaultMessage: 'Drop files or click here to upload',
...
}
);
var myDropzoneTheSecond = new Dropzone(
'#form2',
{
url : "upload'",
paramName: 'postedFile',
addRemoveLinks: true,
dictDefaultMessage: 'Drop files or click here to upload',
...
}
);
Run Code Online (Sandbox Code Playgroud)
每个 dropzone 的选项几乎相同,除了 url 之外。那么,如何集中该选项,以便我不必为其他 dropzone 编写相同的配置?
我读过文章" 我们如何做MVC ".在规则#3中,表示"我们每个视图只有一个ViewModel类型".例如,当我们在mvc中搭建脚手架时,它会自动创建5个视图(创建,删除,详细信息,编辑和索引).通过该声明,是否意味着我们必须为该视图创建5个ViewModel?如果我的假设是错误的,那么使用ViewModels的最佳做法是什么?
我正在尝试使用AngularJS创建日期并根据文档
输入日期验证和转换.在尚不支持HTML5日期输入的浏览器中,将使用文本元素.在这种情况下,必须以有效的ISO-8601日期格式(yyyy-MM-dd)输入文本,例如:2009-01-06.由于许多现代浏览器尚不支持此输入类型,因此通过占位符或标签向用户提供预期输入格式的提示非常重要.
它只接受有效的ISO-8601日期格式(yyyy-MM-dd).
我试图在pattern's属性中定义新的日期格式,如下面的代码所示:
<div ng-app="">
<form name="frmSPA" novalidate>
<input type="date" placeholder="Enter SPA Date" pattern="dd/MM/yyyy" name="SPADate" ng-model="SPADate" ng-required="true" />
<span ng-show="frmSPA.SPADate.$touched && frmSPA.SPADate.$error.required">SPA Date is required</span>
<span ng-show="frmSPA.SPADate.$touched && frmSPA.SPADate.$error.date">Not a valid date</span>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
那么如何将默认日期格式更改为dd/MM/yyyy.这是jsfiddle.
我有一个像这样的字符串:
string query = "INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, @address, @address2)"
Run Code Online (Sandbox Code Playgroud)
然后我@address用'Elm Street' 代替
query = query.Replace("@address", "'" + "Elm Street" + "'");
Run Code Online (Sandbox Code Playgroud)
结果变成:
INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, 'Elm Street', 'Elm Street'2)
Run Code Online (Sandbox Code Playgroud)
如何获得结果:
INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, 'Elm Street', @address2) ?
Run Code Online (Sandbox Code Playgroud) 我正在使用MVC 4 VS 2012 Express for Web开发网站。通常,当我直接从视图中运行时,例如Home Controller中的Index View,我在URL地址栏上获得了“ http:// localhost:62335 / ”,但是现在我获得了http:// localhost:62335 / Views / Home /Index.cshtml
我不会在RouteConfig类上更改路由,如下面的代码所示
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况以及如何解决?
c# ×6
asp.net-mvc ×4
javascript ×3
jquery ×2
angularjs ×1
automapper ×1
datatables ×1
date ×1
dropzone.js ×1
idisposable ×1
knockout.js ×1
momentjs ×1
nlog ×1
razor ×1
replace ×1
sql ×1
string ×1
viewmodel ×1