I know that Visual Studio 2013 launches officially tomorrow, and I hope there will be more supporting documentation, especially with regard to ASP.NET Identity. I jump, so far someone can help me.
All I'm trying to do is get the UserID of the current user as a foreign key in the table that I called Retailer.
First, here is the error message I get
An entity object cannot reference multiple instances of IEntityChangeTracker.
Here is my 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; } }
This is how the Entity Framework CodeFirst created a table from the specified class:
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);
And this is where I am trying to save the record in this table in my controller:
if (ModelState.IsValid) { var currentUser = await UserManager.FindByIdAsync(User.Identity.GetUserId()); retailer.UserProfile = currentUser; db.Retailers.Add(retailer); await db.SaveChangesAsync(); return RedirectToAction("Index"); }
And for full disclosure, here is some stack trace:
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