我有一个项目设置为x64(它使用一些64位的Nuget包).一切都运行和部署良好,但尝试enable-migrations在包管理器控制台运行EF's 得到我System.BadImageFormatException.完整的例外情况:
PM> enable-migrations
System.BadImageFormatException: Could not load file or assembly or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name:
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& …Run Code Online (Sandbox Code Playgroud) EntityModel定义为: Personnel具有指向Country的链接
在LinqPad中执行此代码时,我发现第一个查询中生成的SQL未优化(返回所有字段)?我在这里错过了什么或做错了什么?
查询1 LINQ
var Country = Countries.FirstOrDefault(o => o.Id == 100000581);
var personnelIds = Country.Personnels.Select(p => p.Id).ToArray();
personnelIds.Dump();
Run Code Online (Sandbox Code Playgroud)
查询1 SQL
exec sp_executesql N'SELECT [t0].[Id], [t0].[Version], [t0].[Identifier], [t0].[Name], , [t0].[UpdatedBy] FROM [Personnel] AS [t0] WHERE [t0].[Country_Id] = @p0',N'@p0 bigint',@p0=100000581
Run Code Online (Sandbox Code Playgroud)
查询2 LINQ
var Country = Countries.FirstOrDefault(o => o.Id == 100000581);
var personnelIds2 = Personnels.Where(p => p.Country == Country).Select(p => p.Id).ToArray();
personnelIds2.Dump();
Run Code Online (Sandbox Code Playgroud)
查询2 SQL
exec sp_executesql N'SELECT [t0].[Id] FROM [Personnel] AS [t0] WHERE [t0].[Country_Id] = @p0',N'@p0 bigint',@p0=100000581
Run Code Online (Sandbox Code Playgroud)
使用的数据库是SQL Express 2008.而LinqPad版本是4.43.06
我想启动一个具有管理员权限的进程.当我运行以下代码时,Process抱怨说它需要管理员权限:
public class ImpersonationHelper : IDisposable
{
IntPtr m_tokenHandle = new IntPtr(0);
WindowsImpersonationContext m_impersonatedUser;
#region Win32 API Declarations
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2; //This parameter causes LogonUser to create a primary token.
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public extern static bool CloseHandle(IntPtr handle);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public extern static bool DuplicateToken(IntPtr …Run Code Online (Sandbox Code Playgroud) 我有一个表,为表的某些行存储一些额外的数据,如:
public class QuoteExtra
{
[Key]
public int QuoteId { get; set; }
// More fields here
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在这个表中添加行,我明确地设置了PK.
如果我只是如上所述,设置值并提交行会导致该值被丢弃并替换为数据库中自动生成的值(并且该列在实际模式中定义为Identity列).
这似乎是正确的解决方案:
public class QuoteExtra
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int QuoteId { get; set; }
// More fields here
}
Run Code Online (Sandbox Code Playgroud)
然而,这反而让我成为例外:
当IDENTITY_INSERT设置为OFF时,无法在表'EnumTest'中为标识列插入显式值.
那么,我如何编写我的类,以便我能够在EF中设置主键的值?
编辑:
我尝试添加以下基于代码的迁移将IDENTITY_INSERT设置为ON:
public override void Up()
{
Sql("SET IDENTITY_INSERT QuoteExtra ON");
}
Run Code Online (Sandbox Code Playgroud)
我跑了它并再次尝试,但得到了与上面相同的例外.奇怪的是,数据库确实反映了这个设置,并且直接运行SQL确实允许我为主键插入任意值 - 因此看起来实体框架本身正在执行此规则,而忽略了识别IDENTITY_INSERT不在事实定下来了.我需要在EF本身设置它吗?
编辑2:
我误解了IDENTITY_INSERT; 我假设将它设置为无限期地保留在该表中.实际上它只要"会话"就可以存在,这意味着例如在迁移中设置它意味着它只存在......只要迁移运行,并且与我以后的.Add()之后的未来连接没有关系. ,这解释了为什么我仍然有这个例外 - 数据库确实是异常的来源,而不是EF.由于IDENTITY_INSERT每个会话最多限制一个表,因此这是一种相当低效的方法 - 首先不创建Identity PK列似乎是一个更好的路径.
如果重命名属性,Visual Studio IDE非常智能,可以帮助您重构在整个代码中重命名该属性.如果重命名位于EF迁移中使用的模型上,则运行标准自动迁移,如:
update-database -f
Run Code Online (Sandbox Code Playgroud)
你会得到这个:
AddColumn("NewName"...
DropColumn("OldName"...
Run Code Online (Sandbox Code Playgroud)
不是你想要的.显然,此时运行Add-Migration将允许您进入并手动将这两个调用更改为对RenameColumn的单个调用,但是有一些方法可以让自动迁移自动执行此操作吗?一些财产重命名方法可能会让我做得不对劲?
我在VS2012中使用EF 5.0,但这种行为也出现在EF 4.3.1和VS2010中.
entity-framework code-first ef-code-first ef-migrations entity-framework-5
在标准的ASP.Net MVC Identity 2.0 Owin实现中的几个地方,你会看到rememberBrowser,如:
await signInManager.SignInAsync(user, isPersistent: isPersistent, rememberBrowser: false);
Run Code Online (Sandbox Code Playgroud)
如果你将rememberBrowser设置为true,我注意到我可以杀死浏览器,杀死IIS Express,删除浏览器登录的用户,甚至重新启动我的机器,浏览器仍被视为已登录.不太好,考虑到被删除的用户被视为授权/登录将导致在该[Authorize]属性后面的代码中出现各种问题,这些问题需要有效的用户使用.
那么rememberBrowser究竟做了什么,是否有人冒险将cookiesBrowser伪造成绕过OWIN登录?似乎重点[Authorize]是保证没有人,但登录用户访问给定的控制器动作,并且rememberBrowser似乎是该保证中的漏洞.
奖金问题:有没有办法禁用rememberBrowser,这样即使伪造的cookie确实进来,它也会被拒绝?
我们正在使用Entity Framework 5.0 Code First和Automatic Migrations.
我有一个这样的课:
public class TraversalZones
{
public int Low { get; set; }
public int High { get; set; }
}?
Run Code Online (Sandbox Code Playgroud)
然后我们意识到这些属性并不是正确的名称,所以我们改变了它们:
public class TraversalZones
{
public int Left { get; set; }
public int Top { get; set; }
}?
Run Code Online (Sandbox Code Playgroud)
重命名在整个项目中正确重构,但我知道自动迁移不够智能,无法在IDE中获取这些显式重命名,因此我首先检查以验证此列重命名的唯一挂起迁移:
update-database -f -script
Run Code Online (Sandbox Code Playgroud)
果然它只是显示SQL下降低和高并添加Left和Top.然后我添加了手动迁移:
add-migration RenameColumns_TraversalZones_LowHigh_LeftTop
Run Code Online (Sandbox Code Playgroud)
并将生成的代码修复为:
public override void Up()
{
RenameColumn("TraversalZones", "Low", "Left");
RenameColumn("TraversalZones", "High", "Top");
}
public override void Down()
{
RenameColumn("TraversalZones", "Left", "Low");
RenameColumn("TraversalZones", "Top", "High");
}
Run Code Online (Sandbox Code Playgroud)
然后我更新了db:
update-database …Run Code Online (Sandbox Code Playgroud) entity-framework ef-code-first ef-migrations entity-framework-5
在Visual Studio 2010 + IIS Express 7上,我能够将IIS Express用作服务器并浏览网站.
我已经使用IIS Express 8安装了Visual Studio 2012(在Windows 7 64位上),我无法在其上浏览单个站点.另外,当我查看日志文件(\ Logs和\ TraceLogFiles)时,我甚至没有看到任何2012/IISExpress 8应用程序的单个日志条目,更不用说要查看错误了.
看看applicationhost.config,我确实看到了我正在尝试使用正确的路径,apppool和端口运行的站点.
但是当试图运行它时,IIS Express 8启动,我得到一个异常长的停顿,然后我在浏览器中得到一个无法连接错误.也就是说,在IE9中我得到"Internet Explorer无法显示网页",在Chrome中"哎呀!Google Chrome无法连接到localhost:60046"
有没有其他人遇到这个?有什么需要做的事情来完成VS2012的IIS Express 8配置吗?
更新 2013年3月2日
这仍然没有得到解决,但这里有一系列症状和部分解决方案.
IIS Express完全不起作用 我最初无法在任何条件下连接到IIS Express.事实证明我有两个问题,一个与DNS有关,另一个似乎与Visual Studio 2012中的错误有关.
问题1:Windows DNS 我已将Windows wifi连接设置为使用Google的DNS服务器,而不是将其保留为自动.这适用于:
它不适用于:
解决方案是将我的DNS设置恢复为自动(并切换我的路由器以改为使用Google DNS).
问题2:Visual Studio 2012中的一个错误Microsoft尚未确认 这使我从命令行可以正常运行IIS Express,唯一剩下的问题是从Visual Studio 2012连接到它.Cassini和IIS(不是Express) )从VS2012工作正常,包括localhost和IIS Express中失败的相同项目.
但是当我尝试针对IIS Express运行时,会出现IIS Express托盘图标,一分钟后Visual Studio似乎冻结,然后托盘图标消失,并且Visual Studio中出现与此问题中显示的相同的错误消息:
在VS2012中调试MVC应用程序尝试两次启动IIS Express
一个特殊的事情是,如果我右键单击该托盘图标并尝试在分钟冻结期间打开浏览器,我将获得Web应用程序 - 它运行一分钟并按预期工作.然后当Visual Studio显然杀死它时它就会死掉.
但是我无法确认IIS Express是否在w.brian问题中运行两次.也就是说,这可能是完全相同的Visual Studio 2012错误,只是显示了非常不同的症状.
微软错误和付费墙我已经向微软报告了这个问题.他们开始跟我诊断,但后来告诉我,我需要花250美元才能继续 - …
我使用ASP.NET MVC从jQuery发布JSON,并使用这个小库函数获取一些JSON:
(function($) {
$.postJson = function(url, data) {
return $.ajax({
url: url,
data: JSON.stringify(data),
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8'
});
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
显然我会这样称呼:
$('#button').click(function() {
$.postJson('/controller/action', { Prop1: 'hi', Prop2: 'bye' })
.done(function(r) { alert('It worked.'); })
.fail(function(x) { alert('Fail! ' + x.status); });
});
Run Code Online (Sandbox Code Playgroud)
ASP.NET MVC 3和ASP.NET MVC 4支持事物的提交方面(在此之前您需要扩展ASP.NET MVC以处理提交JSON),但我遇到的问题是返回.在控制器上我经常返回null,基本上说"成功,没别的说",如:
[HttpPost]
public JsonResult DoSomething(string Prop1, string Prop2)
{
if (doSomething(Prop1, Prop2)
return Json(null); // Success
return Json(new { Message = "It didn't work for …Run Code Online (Sandbox Code Playgroud) 我想合并以下表达式:
// example class
class Order
{
List<OrderLine> Lines
}
class OrderLine { }
Expression<Func<Order, List<OrderLine>>> selectOrderLines = o => o.Lines;
Expression<Func<List<OrderLine>, Boolean>> validateOrderLines = lines => lines.Count > 0;
// now combine those to
Expression<Func<Order, Boolean>> validateOrder;
Run Code Online (Sandbox Code Playgroud)
我使用selectOrderLines上的调用并将结果提供给validateOrderLines,但是因为我在Entity Framework中使用这些表达式,我必须实际创建一个干净的表达式,它应该代表:
Expression<Func<Order, Boolean>> validateOrder = o => o.Lines.Count > 0;
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
asp.net-mvc ×2
c# ×2
64-bit ×1
ajax ×1
authorize ×1
code-first ×1
iis-8 ×1
iis-express ×1
jquery ×1
json ×1
lambda ×1
linq ×1
null ×1
owin ×1
primary-key ×1
select ×1