我正在尝试实体框架代码第一个CTP4.假设我有:
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
public Parent Mother { get; set; }
}
public class TestContext : DbContext
{
public DbSet<Parent> Parents { get; set; }
public DbSet<Child> Children { get; set; }
}
public class ChildEdit
{
public int Id { get; set; }
public string …
Run Code Online (Sandbox Code Playgroud) 我正在使用一个非常简单的asp.net mvc应用程序与Entity Framework 6.0.2,.Net 4.5.1:
public class HomeController : Controller
{
public ActionResult Index()
{
int count;
using (var db = new LocalContext())
{
count = db.Counters.Count();
}
return View(count);
}
}
public class Counter
{
public int Id { get; set; }
}
public class LocalContext : DbContext
{
public DbSet<Counter> Counters { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我对它进行负载测试,我最终会得到Out of Memory异常.(tinyget -srv:localhost -port:<port> -uri:/home/index/ -threads:30 -loop:5000
).在性能监视器中,我看到第2代Heap稳步增长.如果我使用较小的循环值(比如500),则大小会增加,直到tinyget停止.然后堆大小保持不变(至少20分钟,之后我停止了服务器).
我究竟做错了什么?
编辑
所以我尝试了Simon Mouriers的建议并省略了EF代码.然后我没有记忆问题.所以我想,也许如果我使用Release而不是Debug,它会有所作为.它做到了!内存在一段时间后被释放,我可以在网站上施加高负荷.然后我切换回Debug,看看我是否可以获得更多信息......即使在调试模式下也没有问题了.FML,我工作了一天,现在我再也无法重现了.
我正在尝试使用EF,我根据多对多关系进行了大量过滤.例如,我有人,地点和人员位置表来链接这两者.我也有角色和人员表.
EDIT: Tables:
Person (personid, name)
Personlocation (personid, locationid)
Location (locationid, description)
Personrole (personid, roleid)
Role (roleid, description)
Run Code Online (Sandbox Code Playgroud)
EF将为我提供人员,角色和位置实体.编辑:由于EF 不会生成personlocation和personrole实体类型,因此不能在查询中使用它们.
如何创建查询以向我提供具有给定角色的给定位置的所有人员?
在SQL中,查询将是
select p.*
from persons as p
join personlocations as pl on p.personid=pl.personid
join locations as l on pl.locationid=l.locationid
join personroles as pr on p.personid=pr.personid
join roles as r on pr.roleid=r.roleid
where r.description='Student' and l.description='Amsterdam'
Run Code Online (Sandbox Code Playgroud)
我看了,但我似乎无法找到一个简单的解决方案.
也许我错过了一些东西但是当我有一个回复相同动作的表单时,文本框值会恢复为旧值.以下示例应在每个POST的文本框中增加值.这不会发生,模型上的值会增加并且模型有效.
但是,如果我清除了HttpPost Action中的模型状态(代码中的注释),一切都按预期工作.
我错过了什么吗?
这是代码:
模型:
public class MyModel
{
public int MyData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
视图:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.MyModel>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm()) {%>
<%: Html.TextBoxFor(m => m.MyData)%> (<%: Model.MyData%>)
<%: Html.ValidationMessageFor(m => m.MyData) %> <br />
State :<%: ViewData["State"] %> <br />
<input type="submit" />
<% } %>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
控制器:
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View(new MyModel { MyData = 0 }); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试实现Parallel.ForEach
模式并跟踪进度,但我遗漏了一些有关锁定的内容.以下示例计数为1000时threadCount = 1
,但不是threadCount
> 1. 当正确的方法是什么时候?
class Program
{
static void Main()
{
var progress = new Progress();
var ids = Enumerable.Range(1, 10000);
var threadCount = 2;
Parallel.ForEach(ids, new ParallelOptions { MaxDegreeOfParallelism = threadCount }, id => { progress.CurrentCount++; });
Console.WriteLine("Threads: {0}, Count: {1}", threadCount, progress.CurrentCount);
Console.ReadKey();
}
}
internal class Progress
{
private Object _lock = new Object();
private int _currentCount;
public int CurrentCount
{
get
{
lock (_lock)
{
return _currentCount;
}
} …
Run Code Online (Sandbox Code Playgroud) 我尝试使用DeviceAdminReceiver锁定设备并尝试启用以下管理:
if (!mDPM.isAdminActive(mDeviceAdminSample)) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Additional text explaining why this needs to be added."); startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
并得到如下错误:
错误/错误(1022):java.lang.SecurityException:uid 10045没有为策略#3拥有的活动管理员
请给我一些代码解决方案以及如何启用管理权限.
我在我的Entity Framework repo上创建了这个搜索方法:
public IEnumerable<Person> GetPersonsWithFilter(string filter)
{
var items =
filter.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var query = _personRepo.All(); // Return IQueryable<Person>
foreach (var item in items)
{
query = query.Where(i => i.SearchName.Contains(item.ToLower()));
}
query.TraceSql(i => Logger.Error(i));
return query.Take(50);
}
Run Code Online (Sandbox Code Playgroud)
TraceSql输出生成的sql.如果我的过滤器是"John Landheer",则正确生成sql:
SELECT [Extent1].[PersonId] AS [PersonId] // Other fields deleted for readability
FROM [dbo].[Person] AS [Extent1]
WHERE
(( CAST(CHARINDEX(LOWER(@p__linq__0), [Extent1].[SearchName]) AS int)) > 0)
AND
(( CAST(CHARINDEX(LOWER(@p__linq__1), [Extent1].[SearchName]) AS int)) > 0)
Run Code Online (Sandbox Code Playgroud)
但是,参数是相同的:@p_ linq _0 ='landheer'和@p_ linq …
我有以下代码
public class TestModel
{
public int TestId1 { get; set; }
public int TestId2 { get; set; }
public int TestId3 { get; set; }
public List<TestSubModel> SubMods { get; set; }
public IEnumerable<SelectListItem> SelectListItems { get; set; }
}
public class TestSubModel
{
public string ItemId { get; set; }
}
public class HomeController : Controller
{
public ActionResult Index()
{
var m = new TestModel
{
TestId1 = 1,
TestId2 = 2,
TestId3 = 3,
SelectListItems = …
Run Code Online (Sandbox Code Playgroud) 我不明白为什么代码在调用savechanges之前首先不向集合中添加新项.我从NuGet(4.1.10331.0)安装了EF4.1.我创建了以下示例:
public class TinyItem
{
public int Id { get; set; }
public string Name { get; set; }
}
public class TinyContext : DbContext
{
public virtual DbSet<TinyItem> Items { get; set; }
}
class Program
{
static void Main(string[] args)
{
using (var ctx1 = new TinyContext())
{
ListItems(ctx1, "Start");
ctx1.Items.Add(new TinyItem { Name = "Test1" });
ListItems(ctx1, "After add");
ctx1.SaveChanges();
ListItems(ctx1, "After commit");
}
Console.ReadKey();
}
public static void ListItems(TinyContext ctx, string label="")
{
Console.WriteLine("=========================================");
Console.WriteLine(label);
Console.WriteLine(string.Format("Items.Local: …
Run Code Online (Sandbox Code Playgroud) 我读到一个Web服务没有global.asax来配置全局设置(比如automapper配置).所以我的问题是:
我应该将自动播放器配置放在每个web方法中,还是我可以在全球范围内放置它?
我每晚都要拨打几千次网络服务,所以我担心如果自动播放器配置昂贵,则需要更长的时间.我是纠正还是只是不必要地担心?
谢谢,约翰
我的页面上有一个reportviewer(Microsoft.ReportViewer.WebForms)控件.我的所有报告都使用一个数据源.我希望能够从我的UAT环境启动时让我的报告在不同的数据库上运行.因此报告的位置是相同的,但数据来自不同的数据库.我似乎无法找到这是怎么做的,它甚至可能吗?
编辑:它们是SQL Server上的服务器报告.我知道你可以设置programificaly数据集,但我只是希望报告指向不同的数据库并保持报告的其余部分不变.2005年TIA,
约翰
c# ×4
asp.net-mvc ×2
automapper ×2
.net ×1
android ×1
asp.net ×1
binding ×1
device-admin ×1
locking ×1
many-to-many ×1
razor ×1
reportviewer ×1
web-services ×1