Usuario de la aplicación de identidad ASP.NET MVC 5 como clave externa
Sé que Visual Studio 2013 se lanzará oficialmente mañana y espero que haya más documentación que lo acompañe, especialmente en lo que respecta a la identidad de ASP.NET. Estoy esperando que mientras tanto alguien me pueda ayudar.
Todo lo que estoy tratando de hacer es obtener el ID de usuario del usuario actualmente registrado como clave externa en una tabla que llamé Minorista.
Primero aquí está el mensaje de error que estoy recibiendo
Un objeto de entidad no puede ser referenciado por múltiples instancias de IEntityChangeTracker.
Aquí está miPOCO:
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; }
}
Aquí es cómo Entity Framework CodeFirst creó la tabla de la clase anterior:
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);
Y aquí es donde estoy tratando de guardar un registro en esta tabla en mi Controlador:
if (ModelState.IsValid)
{
var currentUser = await UserManager.FindByIdAsync(User.Identity.GetUserId());
retailer.UserProfile = currentUser;
db.Retailers.Add(retailer);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
Y para una revelación completa aquí es parte del seguimiento de pila:
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