首先使用EF5数据库.在创建我的上下文中,我设置ContextOptions.LazyLoadingEnabled到true.有些事情发生了变化false(我们的代码中没有任何地方更改了设置).
在各个方面,我正在检查它是否仍然true使用这段代码(从实体对象获取上下文).该问题仅在运行多个线程时显示(加载一些实体,然后通过多线程代码传递它们).它不会出现在代码中的任何一致点上,因此无法确定究竟是什么导致它.
我想我只是希望有人可能对EF的内部运作有更多的了解并给我一些线索......
假设我有这些关系的权利:这只是一个虚构的例子,而不是我现在的实体.
课程有很多用户,用户有很多课程
课程有很多NewsPosts,NewsPosts有很多课程
用户有很多NewsPosts,NewsPosts有很多用户
我首先使用.NET Web API实现实体框架代码,它以JSON的形式发回实体.当我尝试获取一个课程时,它会发回一个带有entites关系的JSON结果,这很好,但我希望设置一个限制它序列化的级别,所以它不会序列化所有关系超出第一个或二级.
GET课程/将序列化为:
{
"Users":[{
"id":1,
"newsPosts": [{
"id":1,
"message":"foo"
}]
}],
"newsPosts":[{
"id":2,
"message":"bar"
}]
}
Run Code Online (Sandbox Code Playgroud)
我想要的是仅序列化1个或2个级别,结果将是:
{
"Users":[{
"id":1,
"newsPosts": []
}],
"newsPosts":[{
"id":2,
"message":"bar"
}]
}
Run Code Online (Sandbox Code Playgroud)
我添加了一个:
json.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
Run Code Online (Sandbox Code Playgroud)
这是删除referencelooping.
简而言之:有没有办法设置最大数量的节点来序列化?
我创建了以下javascript对象:
var Content = Content || {};
// Constructor defines properties and inits object
Content.ProductManager = function () {
// ...
};
Content.ProductManager.prototype = function () {
//
// private members
//
var setProductAsPreviewed = function (args) {
// code omitted for brevity
// ....
};
//
// public members
//
return {
setProductAsPreviewed: setProductAsPreviewed
};
} ();
Run Code Online (Sandbox Code Playgroud)
传递给的对象setProductAsPreviewed具有以下属性:
args = {
productId: int,
productName: string,
updateDate: date,
saveItems: bool
};
Run Code Online (Sandbox Code Playgroud)
我想包含XML注释,以便我可以获得传递给函数的参数的intellisense setProductAsPreviewed:
var productManager = new …Run Code Online (Sandbox Code Playgroud) .net javascript intellisense visual-studio-2010 visual-studio
实体框架为在同一datacontext中更新数据提供了极大的灵活性
Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()
Run Code Online (Sandbox Code Playgroud)
如果我必须将此Update函数移动到仅在请求中使用"Person"的Service层,那么将"Person"请求对象分配到datacontext中而不再进行深度复制的最佳方法是什么?
我在我的项目中使用Entity Framework 4.框架已创建自己的连接字符串,因此我的web.configconnectionStrings部分文件如下所示:
<connectionStrings>
<add name="ApplicationServices" connectionString="data source=localhost;user id=user;pwd=pass;initial catalog=VNK" providerName="System.Data.SqlClient" />
<add name="VNKEntities" connectionString="metadata=res://*/VNKModel.csdl|res://*/VNKModel.ssdl|res://*/VNKModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=localhost;Initial Catalog=VNK;User ID=user;Password=pass;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
第一个连接字符串ApplicationServices是我原来的连接字符串.第二个,VNKEntities在生成模型时创建.
当我检查生成的*.edmx文件时,我发现此模型正在引用其连接字符串,如下所示:
/// <summary>
/// Initializes a new VNKEntities object using the connection string found in the 'VNKEntities' section of the application configuration file.
/// </summary>
public VNKEntities() : base("name=VNKEntities", "VNKEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何摆脱VNKEntities连接字符串,只留下ApplicationServices,我将从我的模型中引用?我想只有一个连接字符串到数据库,因为我只使用一个数据库(从更换的构造函数的参数name=VNKEntities来name=ApplicationServices不工作).
问候
我在使用Visual Studio Team Services(VSTS)部署Azure WebJob时遇到了一些问题.
WebJob似乎已成功部署,但它破坏了托管在同一App Service中的Azure网站!如果我使用VS2013部署,我没有这个问题.
这是我的构建任务,它生成WebJob部署包:
这是我的部署任务:
部署Azure WebJob时没有错误.如果我去Azure门户,我看到WebJob就在那里,它运行成功.WebJob文件wwwroot\App_Data\jobs\triggered\RemoveExpiredDids按预期复制到文件夹中,但问题是其他一些文件将被复制到该wwwroot\App_Data\bin文件夹中,这将破坏已部署到该App Service中的现有网站!
所以我决定找出为什么会发生这种情况.下载并解压缩部署包后,我看到有2个文件夹(app_data和bin)和调度程序文件(settings.job):
这解释了为什么有些程序集被应用到wwwroot\App_Data\binApp Service中.奇怪的是,从VS2013部署时不会发生这种情况!我查看了MSBuild日志,找到了以下行:
由于跳过指令"SkipBinFolderOnDeploy",跳过了对象dirPath([app service name]\bin).
总结bin一下,从VSTS部署Azure WebJob时会包含文件夹,但在从VS2013部署Azure WebJob时会将其排除在外.
所以我的问题是:如何bin在使用VSTS时阻止部署文件夹?是否有任何MSBuild参数/标志来执行此操作?
使用EntityFramework,该子句.OrderBy(x => x.Title.StartsWith("foo"))导致SQL WHERE (Title LIKE 'foo%' ESCAPE '~').
查看完整查询的执行计划,我发现当我删除时,我得到了一个不同的计划(一个使用列的非聚集索引)ESCAPE '~'.
为什么EF试图逃避不需要它的字符串,我怎么能让它停止?
我在Azure DevOps上为Service Fabric解决方案配置了一个构建管道,如下所示:
直到几天前,当某个特定的构建代理(专用)上的构建开始失败时,一切都很好,并出现以下错误(对于一些项目):
C:\ Program Files \ dotnet \ sdk \ 2.1.200 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.PackageDependencyResolution.targets(327,5):错误:资产文件'F:\ Agent03 \ w \ 84 \ s找不到\ src \ MyProject.Sam.Tiles.Domain \ obj \ project.assets.json'。运行NuGet软件包还原以生成此文件。
失败的任务是Build solution $(PathToSolution)一项。
奇怪的是,当在某些代理上运行时构建失败,但是对于其他代理,构建很好。
一些细节:
Use NuGet 4.x我认为,这项任务是最近开始使用NuGet v4.9.1的。我尝试使用v4.8.1没有运气;PackageReference格式,但是.sfproj项目使用packages.config文件dotnet restore任务,但尝试恢复该.sfproj项目的软件包时出现错误:
错误:无法找到.. \ packages \ Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7 \ build \ Microsoft.VisualStudio.Azure.Fabric.Application.props文件。请还原'Microsoft.VisualStudio.Azure.Fabric.MSBuild'Nuget程序包
关于什么可能导致此问题的任何想法?
我的数据库中有许多表,它们包含对键值对的引用:
电话号码类型:
等等
所以我有一个表的类型,当它们在其他表中使用时,它们将int值作为外键引用.当我把它们拉出来时,我一直把它们存放keyvaluepair<int, string>在正在使用它们的类中.
当我需要获取它们的列表时,我想我只会创建它们的List <>而不是使用两种不同类型的数据类型来获取相同的数据.
当我在使用edittemplate位时需要在gridview中填充下拉列表时,我的问题已经到了.如果我使用数据源将其拉出来,它将在文本中写入[1 Home],而不是将int作为值,将Home作为要显示的文本.
我想我真的有一个多部分问题.
一:
我是傻瓜吗?这是一个非常糟糕的方法来获取数据并存储它(keyvaluepair部分)?我应该将它全部存储在数据表中吗?我不喜欢把它全部放在数据表中.我把我的DAL带到我的BLL并尝试将所有内容封装为对象或List<>对象而不是所有内容的表.大部分时间这都运作良好.
二:
如果我使用某个对象而不是数据表绑定到下拉列表的objectdatasource,我该如何设置当前选择的值,而不是让它只选择列表中的第一项?
编辑
正如下面所指出的,我是一个白痴,只需要设置DataValueField和DataKeyField.
要使下拉列表绑定,我必须这样做:
SelectedValue='<%# DataBinder.Eval(Container, "DataItem.PhoneType.Key") %>'
Run Code Online (Sandbox Code Playgroud)
我没有立刻看到它的原因是因为它没有出现在我的intellisense中,但是当我手动键入它时,它起作用了.
.net ×7
c# ×3
azure-devops ×2
.net-3.5 ×1
ado.net ×1
asp.net ×1
azure ×1
data-binding ×1
intellisense ×1
javascript ×1
json ×1
msbuild ×1
nuget ×1
sql ×1
sql-server ×1
vb.net ×1