好的,我有一个像这样的业务逻辑类:
注意:对于上下文,供应商简报是描述PDF文档"下载"的简单实体.
/// <summary>
/// Houses business level functions for dealing with vendor briefs.
/// </summary>
public class VendorBriefController : IVendorBriefController
{
/// <summary>
/// Vendor brief controller requires an instance of IVendorBriefRepository.
/// </summary>
IVendorBriefRepository _vendorBriefRepository;
/// <summary>
/// Initializes an instance of VendorBriefController.
/// </summary>
public VendorBriefController(IVendorBriefRepository vendorBriefRepository)
{
_vendorBriefRepository = vendorBriefRepository;
}
/// <summary>
/// Get a list of string filters for vendor briefs.
/// </summary>
/// <returns>A list of string filters.</returns>
public dynamic GetFilters()
{
List<string> …Run Code Online (Sandbox Code Playgroud) 我正在努力找出实体框架和存储库模式的理想实现.我正在使用Entity Framework 4.3代码优先,而我似乎无法完全理解实体框架的正确用法.
我喜欢EF给桌子带来的东西,比如跟踪实体,延迟加载,导航属性等等.但是根据我的理解,其中一些对于存储库模式并不好用.让我们看一些例子,也许你们可以让我直截了当.
我对通用存储库的初步印象是我不喜欢它,因为我不需要为每个实体提供完全相同的功能.例如,我有一个存储库,用于在数据库中存储简单变量(键/值对).我不需要Add或Delete方法,因为这些是静态变量.我只需要一个Update方法和一个Get方法.通用存储库似乎不是很健壮,并且不允许数据层中有太多自定义代码.我也讨厌通用存储库返回,IQueryable<T>因为它使上层能够直接针对数据存储编写表达式,而上层必须假设正确使用的数据访问技术实现IQueryable,以便它查询数据库而不是拉一切都记忆中,并从那里查询.
它看起来像通用存储库,特别是返回IQueryable的存储库,并不真正坚持良好的关注点分离.也许你们可以为我清除那个,但是现在我正在使用显式命名的存储库,只返回IEnumerable或IList.
我喜欢导航属性的概念,但在实现存储库模式时,我似乎很少使用它们.例如,我有一个名为"Aliases"的导航属性的用户.如果我想为用户添加别名,通过导航属性添加它会非常容易.
myUser.Aliases.Add(new Alias { Name="cls", Value="ClearScreen" });
Run Code Online (Sandbox Code Playgroud)
但那我在哪里打电话dbContext.SaveChanges()?我已经myUser传递给我了,我使用了导航属性,以避免将我IAliasRepository注入到我所在的类中.但是我现在无法将我的新别名保留到数据库中,因为我的上层不知道实体框架.我现在必须注射我IAliasRepository,所以我可以_aliasRepository.SaveChanges().那么现在感觉就像完全浪费.我觉得我应该使用,_aliasRepository.AddAlias(newAlias)因为我必须注入存储库.
自我跟踪实体非常棒,但它们不适合您尝试从应用程序的其余部分隐藏数据访问层详细信息的应用程序.例如,如果我正在编写存储库并且完全无知他们将使用EF,那么我肯定会添加一个Update(Entity entity)方法.但是,在EF中,您不需要这样做,因为您只需对实体进行更改然后调用即可SaveChanges().该实体跟踪已修改的所有内容,并将这些更改持久保存到数据库中.
var myEntity = _entityRepository.GetEntity("some unique ID");
myEntity.SomeProperty = "new value";
_entityRepository.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这导致我消除了我将包含的更新方法,如果我不知道EF不需要它们.这使得重新分解更加困难,因为我可能必须返回并添加适当的更新方法.我唯一的另一种选择是无论如何都要包含这些方法,然后在实现我的存储库时对它们不做任何处理.
public void UpdateEntity(Entity entity)
{
// Do nothing. EF is tracking changes and they will be persisted when
// SaveChanges() is called.
}
Run Code Online (Sandbox Code Playgroud)
所以我的代码看起来像这样,即使它完全没必要.
var myEntity = _entityRepository.GetEntity("some unique ID");
myEntity.SomeProperty …Run Code Online (Sandbox Code Playgroud) 我们有三个项目.
这两个网站项目都参考了Company.Domain.
我们的EF 5 DbContext住在里面Company.Domain.Data.EntityFramework,它看起来像这样:
using System.Data.Entity;
using Company.Domain.Data.EntityFramework.Entities;
namespace Company.Domain.Data.EntityFramework.
{
public class CompanyEntities : DbContext
{
public DbSet<Notification> Notifications { get; set; }
public DbSet<Report> Reports { get; set; }
public DbSet<ReportSection> ReportSections { get; set; }
public DbSet<ReportPage> ReportPages { get; set; }
// brevity brevity
}
}
Run Code Online (Sandbox Code Playgroud)
我们已经启用了迁移并且过去成功使用了该工具,因此我不确定为什么我们现在遇到问题.我们的迁移配置存在,Company.Domain.Data.EntityFramework.Migrations如下所示:
namespace Company.Domain.Data.EntityFramework.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using Company.Domain.Data.EntityFramework;
public class …Run Code Online (Sandbox Code Playgroud) c# entity-framework ef-code-first ef-migrations entity-framework-5
我在ASP.NET MVC 3项目中使用Data Annotations来验证模型.这些都非常方便,但目前它们对我来说都很神奇.我读到数据注释不会抛出异常.那么MVC如何知道将验证错误添加到模型状态字典中?如果没有抛出异常,由于模型验证而在模型上设置属性的失败如何冒泡到MVC?我总是假设每次属性失败时抛出异常,并且MVC模型绑定捕获异常并将其添加到模型状态字典中.
为了测试这个,我创建了一个控制台应用程序,并添加了一个带有验证注释的示例类:
public class MyObject
{
[StringLength(10, MinimumLength=3)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我实例化了该对象,并尝试为Name属性分配小于3的值.尽管注释表明字符串长度小于3,但该属性分配得很好.
static void Main(string[] args)
{
MyObject mine = new MyObject();
mine.Name = "hi";
Console.WriteLine(mine.Name);
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
这个小程序向控制台写出"hi".为什么?当我试图设置mine.Name为"hi" 时,我期待它生气.
我错过了什么?
提前致谢.
我们使用构建脚本来自动化我们的发布过程,它正在使用SVN但现在我们正在使用Git并且需要执行一些命令行操作以从我们的远程存储库中提取.
我能够在这里遵循指南并使用Git bash它很棒.但是,我需要从Windows命令行执行这些任务,以便脚本可以执行这些任务.
git pull origin master 适用于Git bash.
cd "c:\program files (x86)\git\bin
git --git-dir=path\to\.git pull origin master
Run Code Online (Sandbox Code Playgroud)
失败并出错
权限被拒绝(publickey).
致命:远程端意外挂断
显然我的SSH密钥没有正确使用或其他东西.我是新来的,我真的不知道该怎么做.
在C#控制台应用程序中,我发现您可以使用它Console.SetWindowSize(160, 80);来设置控制台窗口的大小.这很好,除了最大行数和列数完全取决于人的计算机的显示分辨率.
当您调用Console.SetWindowSize()并提供过高的值时,应用程序会抛出错误并告诉您最大列数可以是多少.此最大数量因屏幕分辨率而异.如果SetWindowSize()使用了像素,那么获得最大值将很容易.
Screen.PrimaryScreen.Bounds.Width
Run Code Online (Sandbox Code Playgroud)
但是,它不使用像素.它使用列.有没有办法确定控制台列的最大值?
我刚刚开始使用MVC 4 Web API,我似乎误解了它是如何工作的.
在Web API之前,我有一个像这样的简单MVC操作方法:
public JsonResult User()
{
return Json(new
{
firstName = "Joe",
lastName = "Jacobs",
email = "joe.jacobs@gmail.com"
});
}
Run Code Online (Sandbox Code Playgroud)
那会很好.在新的Web API控制器中,我正在尝试做类似的事情.
public object User()
{
return new
{
firstName = "Joe",
lastName = "Jacobs",
email = "joe.jacobs@gmail.com"
}
}
Run Code Online (Sandbox Code Playgroud)
这会因序列化错误而失败:
'ObjectContent`1'类型无法序列化内容类型'application/xml的响应主体; 字符集= UTF-8' .
内部异常:
类型'<> f__AnonymousType1`3 [System.String,System.String,System.String]'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记.有关其他受支持的类型,请参阅Microsoft .NET Framework文档.
关于从API控制器返回匿名类型我不明白的是什么?
我正在使用Entity Framework,并且最近意识到将EF模型放在同一解决方案中的另一个项目中的好处,以便我可以从中构建多个UI.
我将其移至新的类库项目并更新了对Web项目中实体的所有引用,以使用项目生成的新dll.除了一个小障碍外,一切都进展顺利.当我将EF移动到新项目时,不知何故它仍在从web项目中的web.config读取其连接字符串(不要问我怎么做因为我没有线索).
我在EF设计器中使用了"从数据库更新模型"并且没有找到连接字符串(正如我将其移动到新项目后所预期的那样)所以我使用向导生成了一个新的连接字符串,它做得很好.新的连接字符串现在位于类库项目中的App.config中.属性窗口中的连接字符串现在是正确的,设计人员正在从App.Config中读取它.我继续并从Web项目中的Web.Config中删除了连接字符串.
现在运行应用程序时,我收到以下错误:
指定的命名连接在配置中找不到,不打算与EntityClient提供程序一起使用,或者无效.
如果我将连接字符串粘贴回Web.Config,它一切正常.我不想从头开始创建一个新的EF模型,因为它是一个相当复杂的模型,我从数据库中取出后进行了大量的重组.我已经把生成的CS文件以及edmx文件中的XML倾倒了,找不到任何有用的东西.任何帮助深表感谢.显然现在,直到我弄明白,我只是将连接字符串留在web.config中,因为无论出于何种原因,这似乎都有效.
我们在项目中使用Entity Framework,我有一个我在模型中构建的实体.然后我有一个使用存储过程的函数导入.函数import创建的方法应该返回我创建的自定义实体的集合.
问题是我在构建时遇到错误"未映射实体类型'someentity'.
这是什么意思?是不是因为实体没有底层数据存储?它不需要一个,函数import返回这个实体的实例,我不需要更新,编辑或插入这种类型的实体.
函数import很好用,并根据需要返回我的实体的集合,但是这个错误很烦人.虽然错误列表将其列为编译错误,但它实际上并不会停止编译解决方案.
任何帮助表示赞赏.
如果我在XML编辑器中打开EDMX并双击错误列表中的错误,它会以红色突出显示这块XML:
<EntityContainerMapping StorageEntityContainer="KlasEntitiesStoreContainer" CdmEntityContainer="KlasEntities">
<EntitySetMapping Name="VendorBriefs"><EntityTypeMapping TypeName="KlasEntityDataModel.VendorBrief"><MappingFragment StoreEntitySet="ev_VendorBriefs">
<ScalarProperty Name="VendorBriefID" ColumnName="VendorBriefID" />
<ScalarProperty Name="Title" ColumnName="Title" />
<ScalarProperty Name="Link" ColumnName="Link" />
<ScalarProperty Name="LinkText" ColumnName="LinkText" />
<ScalarProperty Name="BriefPath" ColumnName="BriefPath" />
<ScalarProperty Name="Description" ColumnName="Description" />
<ScalarProperty Name="IsActive" ColumnName="IsActive" />
<ScalarProperty Name="DisplayOrder" ColumnName="DisplayOrder" />
</MappingFragment></EntityTypeMapping></EntitySetMapping>
<FunctionImportMapping FunctionImportName="SearchForVendorProductByKlasID" FunctionName="KlasEntities.Store.ev_ds_Products_SearchByKLASID" />
</EntityContainerMapping>
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我在一个子域(dev.u413.com)上有一个网站,我使用jQuery向另一个子域(api.u413.com)上的JSON api发出ajax请求.当我检查Chrome开发工具和Firefox Firebug中的请求时,我的请求似乎被阻止了Access-Control-Allowed-Origin.我设置document.domain为当前域的后缀:document.domain = 'u413.com';.
这是我的要求:
$.ajax({
dataType: 'json',
data: { parseAsHtml: true, cli: 'help' },
url: 'http://api.u413.com/',
success: function (response) {
alert(response.Command);
}
});
Run Code Online (Sandbox Code Playgroud)
如果我将ajax请求修改为在同一个域上,则请求成功.
$.ajax({
dataType: 'json',
crossDomain: false,
data: { parseAsHtml: true, cli: 'help' },
url: 'http://dev.u413.com/',
success: function (response) {
alert(response.Command);
}
});
Run Code Online (Sandbox Code Playgroud)
为什么会这样?浏览器不应该抱怨跨域问题,因为我document.domain根据相同原始策略的指南设置了两个子域的公共后缀.
我目前正在使用jsonp的应用程序,但我觉得正确的ajax请求应该按照我上面链接的相同原始策略工作.如果我不需要,我宁愿不使用jsonp.是否无法跨子域定期发出ajax请求?
c# ×8
.net ×3
asp.net ×2
asp.net-mvc ×2
command-line ×1
console ×1
cross-domain ×1
git ×1
github ×1
javascript ×1
jquery ×1
json ×1
jsonp ×1
linq ×1
mocking ×1
moq ×1
nant ×1
ssh ×1
unit-testing ×1
validation ×1