使用代码优先迁移向表中添加新的非可空列时,它将自动为您创建默认值.这是有道理的,因为现有行需要具有新列的值(因为它不能为null).那很好,但是在那个值分配到处之后,我不再需要了.它是不可空的,因为我想确保始终显式插入值.如果一切都默认为''或0,那么我将拥有魔术字符串.所以无论如何,我可以提出一个解决方案,我并不感到兴奋,但它确实有效.
添加列后,我删除默认约束.
public override void Up()
{
AddColumn("dbo.SomeTable", "NewColumn", c => c.Int(nullable: false));
Sql(Helpers.DropDefaultConstraint("dbo.SomeTable", "NewColumn"));
}
Run Code Online (Sandbox Code Playgroud)
...
public static string DropDefaultConstraint(string table, string column)
{
return string.Format(@"
DECLARE @name sysname
SELECT @name = dc.name
FROM sys.columns c
JOIN sys.default_constraints dc ON dc.object_id = c.default_object_id
WHERE c.object_id = OBJECT_ID('{0}')
AND c.name = '{1}'
IF @name IS NOT NULL
EXECUTE ('ALTER TABLE {0} DROP CONSTRAINT ' + @name)
",
table, column);
}
Run Code Online (Sandbox Code Playgroud)
PROS:一旦实现了辅助方法,我只需要添加一条简单的行来删除约束.缺点:似乎没有必要创建索引只是为了删除它.
另一种方法是改变生成的迁移,因此我们添加它可以为空,更新所有值,然后使其不可为空.
public override void Up()
{
AddColumn("dbo.SomeTable", "NewColumn", c …
Run Code Online (Sandbox Code Playgroud) 我正在编写演示文稿,并认为以下内容应该失败,因为ActionResult没有在正确的上下文中返回.我用VS加载测试它并没有错误.我调试了它,知道它正在切换线程.所以它似乎是合法的代码.
ASP.NET不关心客户端应用程序上的上下文或线程吗?如果是这样,AspNetSynchronizationContext提供了什么目的?我觉得在行动本身中放置一个ConfigureAwait是不对的.这件事似乎有些不对劲.谁能解释一下?
public async Task<ActionResult> AsyncWithBackendTest()
{
var result = await BackendCall().ConfigureAwait(false);
var server = HttpContext.Server;
HttpContext.Cache["hello"] = "world";
return Content(result);
}
Run Code Online (Sandbox Code Playgroud) 我有一个搜索操作有两个路径,一个只返回一个简单视图的同步路径,一个异步路径,异步执行搜索,然后返回一个视图.两者都是GET请求,因此它们是同一行动的一部分.
问题是当我访问动作"localhost:XXXX/Home/Search"时,页面无限加载.使用Fiddler,我可以看到请求永远不会返回.我调试了它,它使它到最后一行代码,但是,再次,请求没有完成.
我已将repro简化为以下内容:
public async Task<ActionResult> Search()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
VS11警告我,代码将在没有等待的情况下同步运行,这很好,但请求没有完成.
这有用吗?或者我需要在这里做点什么吗?
编辑
这是针对.NET 4.5的MVC 4.
编辑2
对于那些在代码中看得更清楚的人来说,这就是我在异步操作中需要同步的原因:
public async Task<ActionResult> Search(string query = null)
{
if (string.IsNullOrWhiteSpace(query))
return View(new SearchViewModel()); // never loads
var model = await _someService.SearchAsync(query);
return View(model); // loads
}
Run Code Online (Sandbox Code Playgroud) 为了避免像Azure网站这样的更多问题,可以部署.NET 4.5.1网站吗?和Azure网站,可以部署.NET 4.5.2网站,是否有一个网站列出了Azure网站支持的所有.NET框架?
我已经使用Facebook在生产中实施了一段时间的社交登录.截至今天早上,它已不再适合我.我在dev(没有SSL)和生产中得到了相同的错误,它在Azure网站上托管,并且确实使用SSL.
这是我看到的错误:
[WebException: The request was aborted: Could not create SSL/TLS secure channel.]
System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) +283
System.Net.WebClient.DownloadString(Uri address) +100
DotNetOpenAuth.AspNet.Clients.FacebookClient.QueryAccessToken(Uri returnUrl, String authorizationCode) +350
DotNetOpenAuth.AspNet.Clients.OAuth2Client.VerifyAuthentication(HttpContextBase context, Uri returnPageUrl) +202
DotNetOpenAuth.AspNet.OpenAuthSecurityManager.VerifyAuthentication(String returnUrl) +411
Microsoft.Web.WebPages.OAuth.OAuthWebSecurity.VerifyAuthenticationCore(HttpContextBase context, String returnUrl) +189
Microsoft.Web.WebPages.OAuth.OAuthWebSecurity.VerifyAuthentication(String returnUrl) +139
其他人看到这个?我的Google登录功能继续正常运行.
我使用以下插件来调整ASP.net应用程序中的图像大小AzureReader2工作正常image404工作正常,但当我尝试访问blob网址时,它不会重定向,它是给予
The remote server returned an error: (404) Not Found.
Run Code Online (Sandbox Code Playgroud)
http://imageresizing.net/plugins/image404
http://imageresizing.net/plugins/azurereader2
有人用过image404和azurereader2吗?它与此兼容吗?
我收到了错误
属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
请注意下面的截图:
请注意,如果我将DataRow属性与一个或三个参数一起使用,则不会出现编译错误.但是如果我使用两个参数而第二个参数是一个字符串数组,那么我确实会遇到编译错误.
DataRowAttribute的签名是public DataRowAttribute (object data1);
和public DataRowAttribute (object data1, params object[] moreData);
第一个给了我没问题,但第二个似乎变得困惑.
我认为params object[]
可能会引起一些混乱.也许它无法确定我的意思[DataRow(new[] { 1 }, new[] { "1" })]
还是[DataRow(new[] { 1 }, "1")]
为了解决这个问题,我尝试将第二个属性转换为object
([DataRow(new[] { 1 }, (object)new[] { "1" })]
),但错误没有消失,它警告我演员阵容是多余的.我也尝试明确指定数组的类型,但这也没有帮助.
我可以添加第三个虚拟参数,即使null似乎解决了这个问题,但这只是一种解决方法.这样做的正确方法是什么?
我在VS 2012 RTM上,使用EF 5.我正在执行Code First,但是因为我刚刚开发,所以试图忽略代码迁移.为了避免它们,我有这套
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>());
Run Code Online (Sandbox Code Playgroud)
偶尔,即使我不认为我触及了模型,它也决定重新创建.没关系.但它通常会导致错误
无法删除数据库,因为它当前正在使用中.
所以我决定完全删除数据库.我进入VS,转到"SQL Server对象资源管理器",找到数据库并删除它.现在我被困在了
无法将文件"{0}"附加为数据库"{1}"
我昨晚发生这种情况,我只是摆弄它直到它工作(关闭任务,重新启动VS,更改web.config中的数据库和文件名等.
所以问题1)我如何摆脱这种状态?
但更重要的问题是,我如何防止自己进入这种状态呢?
在 VS 2019 中,未使用的参数现在在“错误列表”中显示两个问题,而不是一个:CA1801,显示为警告,IDE0060,显示为建议。
这些分析规则做同样的事情吗?如果不是,它们有什么不同。如果是这样,为什么它们是重复的?
async-await ×2
azure ×2
c# ×2
asp.net ×1
azure-devops ×1
facebook ×1
imageresizer ×1
localdb ×1
roslyn ×1
ssl ×1
t-sql ×1