是否可以将新的Asp.net标识与Database First和EDMX一起使用?或者只使用代码?
这是我做的:
1)我创建了一个新的MVC5项目并让新的Identity在我的数据库中创建了新的User和Roles表.
2)然后我打开了我的Database First EDMX文件并拖入了新的Identity Users表,因为我有其他与之相关的表.
3)保存EDMX后,Database First POCO生成器将自动创建User类.但是,UserManager和RoleManager需要从新的Identity命名空间(Microsoft.AspNet.Identity.IUser)继承User类,因此使用POCO User类将不起作用.
我想一个可能的解决方案是编辑我的POCO生成类以使我的User类继承自IUser?
或者ASP.NET Identity仅与Code First Design兼容?
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
更新:根据Anders Abel的建议,这就是我所做的.它的工作原理,但我想知道是否有更优雅的解决方案.
1)我通过在与自动生成的实体相同的命名空间中创建一个部分类来扩展我的实体User类.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
Run Code Online (Sandbox Code Playgroud)
2)我将DataContext更改为继承IdentityDBContext而不是DBContext.请注意,每次更新EDMX并重新生成DBContext和Entity类时,都必须将其设置为此.
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
Run Code Online (Sandbox Code Playgroud)
3)在自动生成的User实体类中,必须将override关键字添加到以下4个字段中,或者将这些字段注释掉,因为它们是从IdentityUser继承的(步骤1).请注意,每次更新EDMX并重新生成DBContext和Entity类时,都必须将其设置为此.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }
Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc ef-database-first asp.net-mvc-5 asp.net-identity
一切都工作得很好,然后我尝试更新我的一个模型类(App类和更新现在留下评论),我将在下面列出并繁荣我有这个丑陋的错误.
自创建数据库以来,支持'ApplicationDbContext'上下文的模型已更改.请考虑使用"代码优先迁移"来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269).在System.Data.Entity.CreateDatabaseIfNotExists
1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf1.b__e()处于System.Data.Entity.InternalContext.PerformInitialization()的System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)中的System.Data.Entity.位于System.Data.Entity.Internal的文档1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action中的System.Data.Entity.Entity.Internal.OitityDatabase()的System.Data.EntityContext.b__4(InternalContext c)中的Internal.LazyInternalContext.b__4(InternalContext c).InternalContext.GetEntitySetAndBaseTypeForType(Type) System.Data.Entity.Internal.Linq.InternalSet中的1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet1.Include(String path)1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryableSystem.Data.Entity.QueryableExtensions.Include [T,System.Data.Entity.Infrastructure.DbQuery 1 source,String path)inInclude(String path)1 source, Expression在Microsoft.AspNet.Identity.UntityFramework.UserStore6.GetUserAggregateAsync(Expression上的Microsoft.AspNet.Identity.EntityFramework.UserStore6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager2.FindByNameAsync(String userName)的Microsoft.AspNet.Identity.UserManager`2.d__12上的TProperty](IQueryable 1路径). MoveNext()---来自先前locati的堆栈跟踪结束 在抛出异常的位置---在ControlPanel.Web.Controllers.AccountController.d__2.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)上在d:\ Projects\FULL\Control Panel\ControlPanel.Web\Controllers\AccountController.cs:第56行
起初我认为这可能是一个迁移问题,因此我完全删除了数据库,重新启用了迁移,并添加了Init迁移并使用了更新数据库
update-database -force -verbose
Run Code Online (Sandbox Code Playgroud)
每件事都没有投诉,但每当我尝试登录我的网站时,我都会收到上一个错误.我做了大约十次移植的事情而没能解决问题.
这是我的域类(模型):
public class App
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual int AppId { get; set; }
//[Required]
public virtual string …Run Code Online (Sandbox Code Playgroud) 我刚刚创建了一个MVC5项目,并从nuget添加了几个包,但是当我编译项目时,我收到了这个错误.似乎其中一个软件包真的依赖于system.web.http版本5.2.3.0,这在任何地方都找不到.我只是想知道如何获得最新版本的system.web.http?
Error 2 Assembly 'System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' uses 'System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
d:\Backup 2014-12-25\Website-Projects\www.ptsol.com.au\packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll
关于使用新的Asp.net身份安全框架的文档很少.
我已经拼凑了我可以尝试创建一个新角色并添加一个用户.我尝试了以下内容:在ASP.NET身份中添加角色
看起来它可能从这个博客获得了信息:使用asp.net身份构建一个简单的待办事项应用程序并将用户与to-do相关联
我已将代码添加到数据库初始化程序,该数据库初始化程序在模型更改时运行.它在RoleExists函数上失败并出现以下错误:
System.InvalidOperationException发生在mscorlib.dll中实体类型IdentityRole不是当前上下文的模型的一部分.
protected override void Seed (MyContext context)
{
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
// Create Admin Role
string roleName = "Admins";
IdentityResult roleResult;
// Check to see if Role Exists, if not create it
if (!RoleManager.RoleExists(roleName))
{
roleResult = RoleManager.Create(new IdentityRole(roleName));
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
我有一个部分视图,尝试IEnumerable<Post>使用异步从数据库中检索a ...
方法
public static class PostService
{
public static int PostsPerPage = 50;
public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
{
return await entityFrameworkDbContext.Posts
.ToListAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
PartialView
public async Task<ActionResult> Recent(int page = 0)
{
return PartialView(await PostService.GetRecentAsync(page));
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我试着打电话给它
@Html.Action("Recent", "Post")
Run Code Online (Sandbox Code Playgroud)
我得到以下异常
HttpServerUtility.Execute在等待异步操作完成时被阻塞.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.InvalidOperationException:HttpServerUtility.Execute在等待异步操作完成时被阻止.
为什么我会收到此错误?不应该工作吗?
c# asp.net-mvc entity-framework entity-framework-6 asp.net-mvc-5
我即将创建一个新的ASP.Net MVC5 Web应用程序.我想在应用程序中使用bootswatch或wrapbootstrap中的主题,但无法找到有关如何执行此操作的一组说明.
我正在使用MVC5和新的OWIN认证中间件尝试VS2013 RC中的一些新功能.
所以,我习惯使用[Authorize]属性来限制角色的操作,但我正在尝试使用基于声明/活动的授权,而我找不到它的等效属性.
有一个明显的我错过了或者我需要自己动手吗?我有点希望有一个开箱即用.
我正在寻找的具体是[Authorize("ClaimType","ClaimValue")]我想的.
提前致谢.
我复制了以前的项目并将其重命名.一旦我成功重命名所有名称空间并正确构建.运行应用程序时出现以下错误:
The following errors occurred while attempting to load the app.
- The OwinStartup attribute discovered in assembly 'User Manager Interface' referencing startup type 'User_Manager_Interface.Startup' conflicts with the attribute in assembly 'Service Monitor Web Interface' referencing startup type 'Service_Monitor_Web_Interface.Startup' because they have the same FriendlyName ''. Remove or rename one of the attributes, or reference the desired type directly.
To disable OWIN startup discovery, add the appSetting owin:AutomaticAppStartup with a value of "false" in your web.config.
To specify the OWIN …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2013创建一个全新的项目,我选择Asp.Net MVC和框架4.5.1项目已创建,然后,我除了F5之外什么都不做以启动默认网页.不幸的是,它产生了一个重定向到登录页面,该页面也重定向到登录页面.这是我在浏览器中的网址的简短版本:
http://localhost:5285/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525
Run Code Online (Sandbox Code Playgroud)
我在事件查看器中没有任何错误.但在屏幕上我看到:
"HTTP错误404.15 - 未找到请求过滤模块配置为拒绝查询字符串太长的请求."
该网站使用IIS Express中的默认设置运行.我该如何解决这个问题?我猜我的Visual Studio 2013出了什么问题?
如果我创建一个全新的网站并将其托管在IIS中,它就可以工作.但是如果我创建一个新网站(没有修改任何东西)并且只是点击播放(默认启动IIS Express),它就不会.
我删除了Documents\IISExpress\config\applicationhost.config中的每个网站.我重新编译了所有内容,并创建了此条目:
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4IntegratedAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
Run Code Online (Sandbox Code Playgroud)
我仍然遇到IIS Express的错误,而不是IIS.
我用Web API 2创建了一个新的MVC5项目,然后我从NuGet添加了Ninject.MVC3包.
构造函数注入适用于MVC5控制器,但在尝试将其与Web API控制器一起使用时出现错误.
尝试创建"UserProfileController"类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.
工作MVC5控制器的构造函数:
public class HomeController : Controller
{
private IMailService _mail;
private IRepository _repo;
public HomeController(IMailService mail, IRepository repo)
{
_mail = mail;
_repo = repo;
}
}
Run Code Online (Sandbox Code Playgroud)
非工作Web API控制器的构造函数:
public class UserProfileController : ApiController
{
private IRepository _repo;
public UserProfileController(IRepository repo)
{
_repo = repo;
}
}
Run Code Online (Sandbox Code Playgroud)
下面是完整的NinjectWebCommon.cs文件:
[assembly: WebActivator.PreApplicationStartMethod(typeof(DatingSite.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(DatingSite.App_Start.NinjectWebCommon), "Stop")]
namespace DatingSite.App_Start
{
using System;
using System.Web;
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Common;
using DatingSite.Services;
using DatingSite.Data;
public static class …Run Code Online (Sandbox Code Playgroud) asp.net-mvc-5 ×10
asp.net-mvc ×8
asp.net ×2
c# ×2
.net ×1
bootswatch ×1
claims ×1
linq ×1
ninject ×1
nuget ×1
owin ×1