官方文档说修改实体我检索DbEntityEntry对象并使用属性函数或我将其状态设置为修改.它使用以下示例
Department dpt = context.Departments.FirstOrDefault();
DbEntityEntry entry = context.Entry(dpt);
entry.State = EntityState.Modified;
Run Code Online (Sandbox Code Playgroud)
我不明白第二和第三声明的目的.如果我问一个像第一个语句这样的实体的框架,然后修改POCO,就像在
dpt.Name = "Blah"
Run Code Online (Sandbox Code Playgroud)
如果我再问问EF到的SaveChanges(),实体有被修改的状态(我通过快照跟踪猜测,这是不是一个代理)和变化,而不需要手动设置状态持续存在.我在这里错过了什么吗?
是否有更简洁的方法来引用用户主目录中的文件,而不是在gradle脚本中执行以下操作?(在此示例中引用Android密钥库)
homeDir = System.getenv('HOMEDRIVE') + System.getenv('HOMEPATH');
...
signingConfigs {
release {
storeFile file(homeDir + "\\.android\\releaseKeystore.jks")
}
}
...
Run Code Online (Sandbox Code Playgroud) 试图在TeamCity中构建一个对NuGet包中的程序集有大量引用的C#项目失败,但在Visual Studio中工作正常.
在日志中找到;
For SearchPath "{HintPathFromItem}".
[13:48:15][ResolveAssemblyReference]
Considered "..\packages\AspNetMvc.4.0.20126.16343\lib\net40\System.Web.Mvc.dll", but it didn't exist.
Run Code Online (Sandbox Code Playgroud)
项目文件中的引用是;
<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\AspNetMvc.4.0.20126.16343\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?它似乎不是从正确的目录开始,因此无法解析存在于.csproj文件上一级的"../packages".
我需要在ASP.NET web api上验证从移动设备传递的Google ID令牌.
谷歌有一些示例代码,但它依赖于JWT NuGet包,它只是.Net 4.5(我使用的是C#/ .Net 4.0).有没有人知道没有这些包装或者自己实现了这样做的任何样品?使用该软件包使得很难找到没有它我需要做的事情.
我正在编写一个来自网上代码片段的审计线索.在调用我的SaveChanges函数时,我遍历所有使用Context注册的已修改实体,并根据其更改构建日志条目.
foreach (DbEntityEntry modifiedEntity in this.ChangeTracker.Entries().Where(p => p.State == System.Data.EntityState.Added || p.State == System.Data.EntityState.Deleted || p.State == System.Data.EntityState.Modified))
{
// For each changed record, get the audit record entries and add them
foreach(AuditLog x in GetAuditRecordsForChange(modifiedEntity, userId))
{
this.AuditLog.Add(x);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试访问修改后的实体的原始值时,将填充所有标量属性,但复杂的属性不存在(属性计数将为6而不是8).然后我调用ToObject()以原始状态构建对象,但显然复杂属性都是空值.
modifiedEntity.OriginalValues.ToObject()
Run Code Online (Sandbox Code Playgroud)
这只发生在我的一些域对象中,并且这些对象在ToObject()调用之后总是显示为代理,而(我不确定为什么)但没有实体为它们创建代理的那些,它们的复杂属性填充得很好.当我在我的应用程序中正常使用POCO代理时,延迟加载可以正常工作.
我注意到如果我对其中一个未作为OriginalValues数据的一部分填充的复杂属性进行更改,则对象的状态不会更改为Modified,这是有意义的,因为更改跟踪将原始值与当前值进行比较看它是否改变了.什么没有什么意义的是,该数据仍然坚持在SaveChanged?
编辑:我刚刚注意到,模型对象确实填充了它的复杂属性,所讨论的复杂属性(按惯例)被实体视为"复杂类型",即没有主键.
有任何想法吗?
我们目前有2个MVC Web应用程序完全独立运行.目的是将这两个站点绑定在某种内联网上,共享授权等,并将某些主页链接到每个站点.
到目前为止,我们已经创建了第三个MVC应用程序,并将两个现有站点作为MVC区域添加到此,这非常有效.我们还设法在单个解决方案下将每个区域分成他们自己的Visual Studio项目.
这两个领域中的每一个都由完全不同的业务部门进行规划,并且(通常)由不同的开发人员开发,并且需要遵循独立的发布周期.
当前的方法是将每个区域放在单独的存储库路径中,并使构建服务器签出每个区域的适当分支,构建主Web应用程序(Intranet主页事物),然后构建引用的区域项目.这个问题是我们必须每次都要部署所有3个项目,即使只有一个区域需要发布.
这不是一个大问题(假设我们不会意外地部署一个新的,未经测试的主内部网Web应用程序与该区域一起发布),但这也意味着构建服务器将使用相同的方式标记特定构建的所有程序集版本号.
第二种方法是主要内联网项目仅参考区域项目的组件而不是项目本身,因此它可以自己构建而无需再次构建每个区域或反之亦然.对此有两个问题,我无法看到MS WebDeploy(由buildserver用来发布我们的代码)只发布某些程序集的方法.其次,单独程序集中的MVC区域似乎需要添加为项目引用而不仅仅是程序集引用,因为视图不能正确动态编译(缺少〜/ Views/web.config?)
有没有更好的方法呢?
编辑:我已经设法让主要的Web应用程序运行与区域的常规程序集引用而不是项目引用(不完全确定如何,它只是工作).这意味着我现在可以根据需要独立于主应用程序构建区域.
下一个问题是使用MSDeploy部署整个批次.区域程序集与主应用程序一起部署在/ bin目录中,但不包括区域的views/scripts/content.我正在研究将各种视图编译到程序集本身的各种技术,但似乎无法使其工作.
我正在研究在Aurelia中构建渐进式Web应用程序的技术,其中包含适用于主流浏览器的离线功能.服务工作者似乎是资产缓存的首选选项,但在Safari(目前是Edge)中缺乏支持.如果他们不受支持,是否可以使用服务工作者回退appcache?如果有appcache清单和服务工作者安装,应用程序将如何运作?
offline web html5-appcache service-worker progressive-web-apps
我有一个插入到MVC项目的QUnit页面上显示的测试运行器页面的最基本示例.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>QUnit basic example</title>
<link rel="stylesheet" href="../Content/qunit-1.11.0.css">
</head>
<body>
<div id="Div1"></div>
<div id="Div2"></div>
<script src="../Scripts/qunit-1.11.0.js"></script>
<script>
test("a basic test example", function () {
var value = "hello";
equal(value, "hello", "We expect value to be hello");
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我只看到一个空白页面.测试在断点处停止时执行..css和.js的链接正确且有效.
我已经看到几个BroadcastReciever示例来检测wifi断开连接,但它们似乎都没有正常工作(例如,每个断开连接触发两次)并且没有提到检查ssid,这是否可能?
所以,为了澄清,我想检测与特定ssid的断开连接.在设备上禁用实际断开连接而不禁用wifi.
谢谢
编辑:重新开放作为实在不行就两个,我们就来测试设备.
我的C#服务器端模型具有TimeSpan属性(用于存储一天中的时间),Breeze检索时将其作为timepans的ISO文本返回.因此,9小时(09:00)的TimeSpan将返回为"PT9H".将此转换为更友好的09:00字符串(将受到UI时间戳小部件限制)的最佳方法是什么?
我正在使用Knockout绑定到我的HTML元素.
android ×2
c# ×2
.net ×1
android-wifi ×1
asp.net-mvc ×1
breeze ×1
deployment ×1
google-plus ×1
gradle ×1
javascript ×1
knockout.js ×1
momentjs ×1
msbuild ×1
nuget ×1
offline ×1
qunit ×1
teamcity ×1
timespan ×1
unit-testing ×1
web ×1
windows ×1