asp.net-mvc – ASP.NET MVC 5身份应用程序用户作为外键
发布时间:2020-05-23 08:58:00 所属栏目:asp.Net 来源:互联网
导读:我知道Visual Studio 2013明天正式推出,希望会有更多的随附文档,特别是它关于ASP.NET身份.我在跳的同时有人可以帮助我. 我所要做的就是将当前登录用户的UserID作为外键访问我称为Retailer的表. 首先是我得到的错误消息 An entity object cannot be referenced
|
我知道Visual Studio 2013明天正式推出,希望会有更多的随附文档,特别是它关于ASP.NET身份.我在跳的同时有人可以帮助我. 我所要做的就是将当前登录用户的UserID作为外键访问我称为Retailer的表. 首先是我得到的错误消息
这是我的POCO: public class Retailer
{
[Key]
public int RetailerId { get; set; }
public string BusinessName { get; set; }
public string PhoneNumber { get; set; }
public string ManagerName { get; set; }
public Enums.Industry Industry { get; set; }
public virtual ApplicationUser UserProfile { get; set; }
}
以下是Entity Framework CodeFirst如何从上面的类创建表: CreateTable(
"dbo.Retailers",c => new
{
RetailerId = c.Int(nullable: false,identity: true),BusinessName = c.String(),PhoneNumber = c.String(),ManagerName = c.String(),Industry = c.Int(nullable: false),UserProfile_Id = c.String(maxLength: 128),})
.PrimaryKey(t => t.RetailerId)
.ForeignKey("dbo.AspNetUsers",t => t.UserProfile_Id)
.Index(t => t.UserProfile_Id);
这是我试图在我的控制器中将记录保存到此表的位置: if (ModelState.IsValid)
{
var currentUser = await UserManager.FindByIdAsync(User.Identity.GetUserId());
retailer.UserProfile = currentUser;
db.Retailers.Add(retailer);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
并且为了完全公开,这里是一些堆栈跟踪: InvalidOperationException: An entity object cannot be referenced by multiple instances of IEntityChangeTracker.] System.Data.Entity.Core.Objects.ObjectContext.VerifyContextForAddOrAttach(IEntityWrapper wrappedEntity) +189 System.Data.Entity.Core.Objects.ObjectContext.AddSingleObject(EntitySet entitySet,IEntityWrapper wrappedEntity,String argumentName) +126 System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.AddEntityToObjectStateManager(IEntityWrapper wrappedEntity,Boolean doAttach) +98 System.Data.Entity.Core.Objects.DataClasses.EntityReference.AddEntityToObjectStateManager(IEntityWrapper wrappedEntity,Boolean doAttach) +65 System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.AddGraphToObjectStateManager(IEntityWrapper wrappedEntity,Boolean relationshipAlreadyExists,Boolean addRelationshipAsUnchanged,Boolean doAttach) +67 System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity,Boolean doAttach) +341 System.Data.Entity.Core.Objects.DataClasses.EntityReference`1.Include(Boolean addRelationshipAsUnchanged,Boolean doAttach) +210 System.Data.Entity.Core.Objects.DataClasses.RelationshipManager.AddRelatedEntitiesToObjectStateManager(Boolean doAttach) +164 System.Data.Entity.Core.Objects.ObjectContext.AddObject(String entitySetName,Object entity) +520 System.Data.Entity.Internal.Linq.<>c__DisplayClassd.<Add>b__c() +97 System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action,EntityState newState,Object entity,String methodName) +355 System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) +200 System.Data.Entity.DbSet`1.Add(TEntity entity) +130 ValueCardPremium.Web.Controllers.<Create>d__7.MoveNext() in c:UsersValentineDocumentsVisual Studio 2013ProjectsValueCardProjectPremiumValueCardPremium.WebControllersRetailerController.cs:70 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21 lambda_method(Closure,Task ) +64 解决方法UserManager使用它自己的DbContext从数据库加载数据.您将需要从用于添加引用的相同dbContext中检索用户.就像是:var currentUMUser = await UserManager.FindByIdAsync(User.Identity.GetUserId());
var currentUser = db.Users.Find(currentUMUser.UserID);
retailer.UserProfile = currentUser;
db.Retailers.Add(retailer);
await db.SaveChangesAsync();
return RedirectToAction("Index");
当然,您必须使用实际适用于您的模型和DbContext的任何方法从数据库中检索用户. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 哪些移动浏览器支持javascript(和Ajax)?
- asp.net-mvc – AntiXss保护Html模型属性
- .NET牛人应该知道些什么,我的回答
- asp.net – 如何检查SQL Server代理是否正在运行
- asp.net – SQL Server 2005:事务死锁
- asp.net-mvc – 一个ASP.NET MVC验证器,用于确保至少选中一
- asp.net – Visual Studio 2012 – 哪里有ASPX设计和拆分视
- Asp Classic返回具体的http状态码
- asp.net-mvc – 在ASP.NET MVC 3中的子文件夹中添加视图
- asp.net – System.Diagnostics.Process.Start不能从IIS工作
推荐文章
站长推荐
- asp.net – jQuery模态窗体对话框回发问题
- asp.net – WebBrowsable vs个性化Web部件
- asp.net-mvc – 使用JSON,JQuery向ASP.NET MVC C
- asp.net-core – 在asp.net vnext中使用Startup.
- asp.net-mvc – FormsAuthentication.RedirectFr
- asp.net-core – 在Visual Studio CTP2中的ASP.V
- asp.net-mvc-4 – ASP.NET MVC 4 ScriptBundle返
- asp.net – 如何在MVC 5中为OwinContext设置Time
- 序列化 – Newtonsoft中的TypeNameHandling需要$
- asp.net(C#)禁止缓存文件不让文件缓存到客户端
热点阅读
