小编Chr*_*ini的帖子

x64 Project中的enable-migrations获取System.BadImageFormatException

我有一个项目设置为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)

64-bit entity-framework ef-migrations

24
推荐指数
2
解决办法
6328
查看次数

在LINQ中只选择一列

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

linq select entity-framework

23
推荐指数
1
解决办法
6万
查看次数

以不同的用户身份启动.Net流程

我想启动一个具有管理员权限的进程.当我运行以下代码时,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)

c# impersonation

20
推荐指数
2
解决办法
6万
查看次数

实体框架代码第一次迁移:设置主键值

我有一个表,为表的某些行存储一些额外的数据,如:

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列似乎是一个更好的路径.

primary-key ef-code-first ef-migrations entity-framework-5

20
推荐指数
1
解决办法
2万
查看次数

EF迁移:自动迁移中的RenameColumn?

如果重命名属性,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

18
推荐指数
2
解决办法
4649
查看次数

Owin记得浏览器究竟做了什么?

在标准的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确实进来,它也会被拒绝?

asp.net-mvc authorize owin asp.net-identity-2

17
推荐指数
2
解决办法
3108
查看次数

EF5代码优先迁移:使用RenameColumn后,"每个表中的列名必须是唯一的"错误

我们正在使用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

16
推荐指数
1
解决办法
2万
查看次数

Visual Studio 2012 IIS Express 8全新安装 - 无法连接

在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服务器,而不是将其保留为自动.这适用于:

  • IIS
  • Cassini(Visual Studio内部网络服务器)
  • 几乎任何其他东西

它不适用于:

  • 尝试连接到localhost时的IIS Express - 即使从命令行运行IIS Express也无法连接,不涉及Visual Studio.

解决方案是将我的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美元才能继续 - …

iis-express visual-studio-2012 iis-8

15
推荐指数
1
解决办法
2万
查看次数

从ASP.NET MVC返回null时,jQuery post JSON失败

我使用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)

ajax asp.net-mvc null jquery json

14
推荐指数
1
解决办法
2万
查看次数

如何在没有调用的情况下合并两个C#Lambda表达式?

我想合并以下表达式:

// 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)

我怎样才能做到这一点?

c# lambda linq-to-entities entity-framework

12
推荐指数
1
解决办法
8905
查看次数