ASP.NET MVC 5身份应用程序用户作为外键

瓦尔·奥卡福

我知道Visual Studio 2013将于明天正式发布,并希望会有更多随附的文档,尤其是有关ASP.NET Identity的文档。我希望与此同时有人可以帮助我。

我要做的就是将当前登录用户的UserID作为外键添加到我称为Retailer的表中。

首先,这是我收到的错误消息

IEntityChangeTracker的多个实例不能引用一个实体对象。

这是我的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 addRelationshipAsUnchanged, 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:\Users\Valentine\Documents\Visual Studio 2013\Projects\ValueCardProjectPremium\ValueCardPremium.Web\Controllers\RetailerController.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实际有效的任何方法从数据库中检索用户。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ASP.NET MVC 5应用程序中扩展ASP.NET身份

来自分类Dev

ASP.NET MVC 5 ApplicationUser作为外键

来自分类Dev

Asp.net身份(MVC 5)跨子域登录和应用程序池身份

来自分类Dev

ASP.NET MVC 5:应用程序池,Windows身份验证和Active Directory

来自分类Dev

WebApi 2身份验证和ASP.NET MVC 5应用程序

来自分类Dev

asp.net MVC 5应用程序中的LDAP身份验证

来自分类Dev

asp.net mvc 4 Intranet应用程序用户

来自分类Dev

ASP.NET 5 / MVC 6应用程序设置

来自分类Dev

将用户分配给Asp.net Mvc 5应用程序中的项目列表

来自分类Dev

身份:在两个不同的asp.net mvc5应用程序中的身份验证

来自分类Dev

使用实体框架的代码优先方法在ASP.NET MVC应用程序中缺少外键关系

来自分类Dev

具有Windows身份验证的ASP.NET MVC Intranet应用程序,如何自动获取当前域用户?

来自分类Dev

从外部应用程序将用户添加到Asp.Net MVC 5标准用户管理中

来自分类Dev

插入外键asp.net mvc

来自分类Dev

Asp.net Mvc身份

来自分类Dev

多域名ASP.NET MVC应用程序的跨域OWIN身份验证

来自分类Dev

在ASP.NET MVC 4应用程序中的身份验证中使用会话变量

来自分类Dev

IIS中的Asp.Net核心MVC应用程序Windows身份验证

来自分类Dev

在MVC Web应用程序中删除ASP.NET身份的问题

来自分类Dev

在ASP.NET MVC 4应用程序中的身份验证中使用会话变量

来自分类Dev

ASP.NET MVC - 两个应用程序之间的相同身份验证

来自分类Dev

使用Web服务作为数据访问层开发ASP.NET MVC应用程序

来自分类Dev

清理ASP.NET MVC应用程序中的输入

来自分类Dev

ASP.NET MVC应用程序的处理参数

来自分类Dev

自托管ASP.NET MVC应用程序

来自分类Dev

应用程序区域中的ASP.NET MVC WebAPI

来自分类Dev

如何部署ASP.NET MVC 4应用程序?

来自分类Dev

PhoneGap开发ASP.NET MVC应用程序

来自分类Dev

通过Asp.Net MVC应用程序设置IdentityServer

Related 相关文章

  1. 1

    在ASP.NET MVC 5应用程序中扩展ASP.NET身份

  2. 2

    ASP.NET MVC 5 ApplicationUser作为外键

  3. 3

    Asp.net身份(MVC 5)跨子域登录和应用程序池身份

  4. 4

    ASP.NET MVC 5:应用程序池,Windows身份验证和Active Directory

  5. 5

    WebApi 2身份验证和ASP.NET MVC 5应用程序

  6. 6

    asp.net MVC 5应用程序中的LDAP身份验证

  7. 7

    asp.net mvc 4 Intranet应用程序用户

  8. 8

    ASP.NET 5 / MVC 6应用程序设置

  9. 9

    将用户分配给Asp.net Mvc 5应用程序中的项目列表

  10. 10

    身份:在两个不同的asp.net mvc5应用程序中的身份验证

  11. 11

    使用实体框架的代码优先方法在ASP.NET MVC应用程序中缺少外键关系

  12. 12

    具有Windows身份验证的ASP.NET MVC Intranet应用程序,如何自动获取当前域用户?

  13. 13

    从外部应用程序将用户添加到Asp.Net MVC 5标准用户管理中

  14. 14

    插入外键asp.net mvc

  15. 15

    Asp.net Mvc身份

  16. 16

    多域名ASP.NET MVC应用程序的跨域OWIN身份验证

  17. 17

    在ASP.NET MVC 4应用程序中的身份验证中使用会话变量

  18. 18

    IIS中的Asp.Net核心MVC应用程序Windows身份验证

  19. 19

    在MVC Web应用程序中删除ASP.NET身份的问题

  20. 20

    在ASP.NET MVC 4应用程序中的身份验证中使用会话变量

  21. 21

    ASP.NET MVC - 两个应用程序之间的相同身份验证

  22. 22

    使用Web服务作为数据访问层开发ASP.NET MVC应用程序

  23. 23

    清理ASP.NET MVC应用程序中的输入

  24. 24

    ASP.NET MVC应用程序的处理参数

  25. 25

    自托管ASP.NET MVC应用程序

  26. 26

    应用程序区域中的ASP.NET MVC WebAPI

  27. 27

    如何部署ASP.NET MVC 4应用程序?

  28. 28

    PhoneGap开发ASP.NET MVC应用程序

  29. 29

    通过Asp.Net MVC应用程序设置IdentityServer

热门标签

归档