我一直在玩Entity Framework 7和ASP.NET 5来处理我正在开发的新项目,但我遇到了障碍.我正在研究的团队使用DBA优先的方法进行开发; 即数据库由DBA设计,然后开发人员更改代码以补偿模型更改.
使用EF6,这很有效,因为我们可以使用EDMX设计器的"更新"功能更新代码.点击一下,我们就可以获得新课程了,我们已经完成了.但是,在EF7中,一切都不同.没有更多的设计师,我们应该使用Code-First,根据EF团队的一些博客文章,它也应该支持"数据库优先"代码生成.
但是,我无法弄清楚如何在ASP.NET 5应用程序中使用Visual Studio 2015 CTP6执行此操作.工具支持还没有,或者我运气不好?它甚至会出现吗?
所以这是我的情况.我正在WebForms应用程序中实现一个WEB API.我有一堆动态类,它们本质上是字典,需要使用自定义JSON序列化格式化程序才能正常工作(因为默认转换器只显示一堆键值配对).
所以首先我创建了一个自定义JSON转换器:
/// <summary>
/// A class to convert entities to JSON
/// </summary>
public class EntityJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsSubclassOf(typeof(Entity));
}
public override bool CanRead
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
// Details not important. This code is called and works perfectly.
}
public override object ReadJson(JsonReader reader, Type …Run Code Online (Sandbox Code Playgroud) 我正在使用SimpleMembership开发一个ASP.NET MVC4项目,它在你登录时会生成一个ASPXAUTH cookie.它似乎工作得很好,但是今天我打开了另一个MVC4项目,只是注意到我已经登录了在.
这非常奇怪,因为新项目实际上没有在数据库中定义任何用户.更令人不安的是,当我点击新项目的"注销"时,它将我从原始网站中删除.
两个站点都在不同的端口上运行,但都在localhost上运行.当检查请求以查看它返回"IsAuthenticated == true"的原因时,我注意到ASPXAUTH cookie被发送到两个站点,并且调试器中cookie的"domain"参数为"null".这让我觉得可能cookie正在生成为"无域"cookie(我不知道这样的事情是否可能,说实话!),并查看了web.config设置以指定域名:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
不幸的是,设置"domain"参数已使cookie停止工作.我已经尝试了所有排列(使用http,没有http,有端口,没有端口等),每次我指定一个域时,浏览器都会收到带有正确指定域名的cookie(我在Chrome开发者工具中检查过它),但随后无法将其发送回后续请求的服务器.
所以,我对这里发生的事情感到很困惑.这是否是由于未在某处正确设置某些内容而导致的安全漏洞?或者,ASPXAUTH cookie将在同一域上的两个不同端口上的两个完全不同的Web应用程序上授权用户,这是完全正常的行为吗?我会在网络主机上测试这个,但遗憾的是我现在无法访问运行MVC4的任何内容.
提前致谢.
asp.net-mvc forms-authentication .aspxauth asp.net-mvc-4 simplemembership
我在ASP.NET Core 2.0 Preview上使用Pomelo 1.1.2以及EF 2.0 Preview.使用他们的演示代码,每次调用"UseMySql"时都会出现以下异常:
System.TypeLoadException occurred
HResult=0x80131522
Message=Method 'Clone' in type 'Microsoft.EntityFrameworkCore.Internal.MySqlOptionsExtension' from assembly 'Pomelo.EntityFrameworkCore.MySql, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.
Source=<Cannot evaluate the exception source>
StackTrace:
at Microsoft.EntityFrameworkCore.MySqlDbContextOptionsExtensions.UseMySql(DbContextOptionsBuilder optionsBuilder, String connectionString, Action`1 mySqlOptionsAction)
at CoreTest1.Startup.<ConfigureServices>b__4_0(DbContextOptionsBuilder options) in C:\DEV\Experiments\CoreTest1\CoreTest1\Startup.cs:line 27
at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass0_0`1.<AddDbContext>b__0(IServiceProvider p, DbContextOptionsBuilder b)
at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.DbContextOptionsFactory[TContext](IServiceProvider applicationServiceProvider, Action`2 optionsAction)
at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass5_0`1.<AddCoreServices>b__0(IServiceProvider p)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactoryService(FactoryService factoryService, ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite …Run Code Online (Sandbox Code Playgroud) mysql pomelo entity-framework-core asp.net-core asp.net-core-2.0
我有一个用于通过套接字连接来回传递 JSON 消息的系统。它使用标记联合来表示消息类型:
export type ErrorMessage = { kind: 'error', errorMessage: ErrorData };
export type UserJoined = { kind: 'user-joined', user: UserData };
// etc
export type Message = ErrorMessage | UserJoined | /*etc*/;
Run Code Online (Sandbox Code Playgroud)
它在基本代码中运行得相当好,但我在其之上构建了一个模块,我想扩展代码。我要添加一个新的消息类型:
export type UserAction = { kind: 'user-action', action: Action }
Run Code Online (Sandbox Code Playgroud)
这里的问题是我无法扩展“Message”以将我的新 UserAction 包含到联合中。我想我可以制作自己的扩展消息:
export type ExtendedMessage = Message | UserAction;
Run Code Online (Sandbox Code Playgroud)
但这里的问题是,第一,这看起来很笨拙。我无法将新的 UserAction 传递到任何需要消息的方法中,即使代码实际上应该完全正常工作。以后想要扩展我的模块和基本模块的任何人都需要创建第三种类型:export type ExtendedMessageAgain = ExtendedMessage | MyNewMessage。
所以。我已经看到通过添加新的 .d.ts 文件来扩展附加属性的接口(例如 Passport 如何扩展 Express JS 的 Request 对象以添加身份验证属性),我认为标记联合也必须存在类似的东西,对吗?
但事实似乎并非如此。我用谷歌搜索了一下,没有看到这种模式在任何地方使用。这让我相信我的设计也许在某种程度上是错误的。但我没有看到解决办法。
我不想使用类,因为类型信息会通过网络被删除;该kind财产必须存在。我喜欢这个范例: …
我正在开发专为手机设计的UWP应用程序.它旨在与本地家庭网络上运行的服务器同步数据.此同步可能需要相当长的时间,因此后台任务不是同步数据的最佳位置; 它可能需要超过我分配的30秒.然而,这个想法是使用带有计时器触发器的后台任务; 它会调用服务器来检查是否有任何消息要消耗,然后弹出一个Toast通知,询问它是否可以在前台运行以执行同步.
如果屏幕打开,代码效果很好.但如果屏幕关闭,那我就不会收到任何通知.起初我以为timertrigger没有触发,但是每当它运行时我就会记录,并且确实足够,每隔15分钟按时运行一次.我深入研究它,它失败了.具体来说,它在网络呼叫上失败了; HttpClient.GetAsync,出现以下错误:
"The text associated with this error code could not be found.\r\n\r\nA connection with the server could not be established\r\n"
Run Code Online (Sandbox Code Playgroud)
现在我检查了服务器; 它正在运行.我打开屏幕,代码突然再次运行.我将触发器设置为仅在未计量连接可用时运行:
var status = await BackgroundExecutionManager.RequestAccessAsync();
if(status.In(BackgroundAccessStatus.DeniedBySystemPolicy, BackgroundAccessStatus.DeniedByUser))
{
return;
}
var builder = new BackgroundTaskBuilder();
builder.Name = Constants.BackgroundTaskName;
builder.SetTrigger(new TimeTrigger(15, false));
builder.AddCondition(new SystemCondition(SystemConditionType.FreeNetworkAvailable));
BackgroundTaskRegistration task = builder.Register();
Run Code Online (Sandbox Code Playgroud)
所以我认为只有当Wifi可用时才会触发定时器.但是当我实际使用此代码执行HTTP Get时:
async protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
{
if (BackgroundWorkCost.CurrentBackgroundWorkCost == BackgroundWorkCostValue.High)
return;
if (!NetworkInterface.GetIsNetworkAvailable())
return;
base.OnBackgroundActivated(args);
if (args.TaskInstance.Task.Name == Constants.BackgroundTaskName)
{
var cancel …Run Code Online (Sandbox Code Playgroud) 我正在编写一个代码分析 webpack 插件,它想在 webpack 包中查找函数名称的所有实例。
我为这个问题做了一个 repo:https : //github.com/RonPenton/webpack-parser-fail-demo
所以解析器真的很简单,就像这样:
class ParsePlugin {
apply(compiler) {
compiler.plugin('compilation', function (compilation, data) {
data.normalModuleFactory.plugin('parser', function (parser, options) {
parser.plugin(`call $findme`, function (expr) {
console.log("found $findme!");
});
});
});
}
Run Code Online (Sandbox Code Playgroud)
https://github.com/RonPenton/webpack-parser-fail-demo/blob/master/parse.js
我想要做的就是在代码中找到 $findme() 的所有实例并记录有关它们的信息。稍后,我什至可能最终更改电话,但那是另一天。
当我提供这个源文件时,一切都很好:https : //github.com/RonPenton/webpack-parser-fail-demo/blob/master/good.js
$findme("Testing");
$findme("Testing too...");
Run Code Online (Sandbox Code Playgroud)
当我运行 webpack 时,输出显示找到了两个实例:
found $findme!
found $findme!
Hash: a6555af5036af17d9320
Version: webpack 3.6.0
Time: 69ms
Asset Size Chunks Chunk Names
good.js 2.52 kB 0 [emitted] main
[0] ./good.js 47 bytes {0} [built]
Run Code Online (Sandbox Code Playgroud)
但是当我使用不同的入口点时,函数是在本地( …
我正在尝试使用SimpleMembership获取一个使用SQL的MVC4站点,但每当我创建用户记录时我都会遇到错误:
[SqlException (0x80131904): Cannot insert the value NULL into column 'Id', table 'NFBC.dbo.User'; column does not allow nulls. INSERT fails.
The statement has been terminated.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1753346
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5295154
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1682
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +269
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) …Run Code Online (Sandbox Code Playgroud) 我正在研究将ASP4/MVC4应用程序迁移到ASP5/MVC6的迁移策略.我们当前的实现依赖于将cshtml视图作为DLL的嵌入资源加载,我们使用VirtualPathProvider来查找这些cshtml文件.
不幸的是,HostingEnvironment.RegisterVirtualPathProvider似乎已经从MVC6中消失了.我能找到的最接近的是IEnvironment.WebRootFileProvider,它是一个IFileProvider.所以我编写了一个测试类来查看它是否可行,不幸的是,我编写的IFileProvider永远不会查询CSHTML文件.我收到所有.JS,.CSS等文件的请求,但没有.CSHTML的请求.
我在这里寻找的是能够挂钩剃刀引擎,并在请求视图时提供从嵌入式资源(或实际上,任何其他来源)加载的CSHTML文件.我应该在这看什么?
谢谢!
c# ×4
asp.net-core ×3
.net ×2
.aspxauth ×1
asp.net-mvc ×1
javascript ×1
json.net ×1
mysql ×1
parsing ×1
pomelo ×1
razor ×1
rest ×1
sql-server ×1
typescript ×1
uwp ×1
webforms ×1
webpack ×1