我一直在努力为’AspNetUsers’表提供一把外键.
我将表重命名为sql Server数据库中的用户只是为了澄清.我的Tutorial表中有一个外键到Users表.这是我的Tutorial表的EF模型类:
public class Tutorial { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int TutorialID { get; set; } [required] public string TutorialTitle { get; set; } [required] public string Description { get; set; } [required] public string TutorialUrl { get; set; } public string TutorialContent { get; set; } public string UserId { get; set; } public virtual AppUser User { get; set; } // this on is IdentityUser actually public DateTime? Published { get; set; } public bool HasBeenAcceptedForPublish { get; set; } public string AdminMessageForNotPublishing { get; set; } [required] public virtual TutorialStatus TutorialStatus { get; set; } }
所以在我更新数据库之后,每当我将新教程保存到EF时,它都会抛出一个错误:
Index was outside the bounds of the array
我猜测Users表的外键有问题.它是与之相关的AppUser对象.如果有人有意义的话,我会抛出Tutorial表的脚本,是什么引发了异常/错误.
CREATE TABLE [dbo].[Tutorials] ( [TutorialID] INT IDENTITY (1,1) NOT NULL,[TutorialTitle] NVARCHAR (MAX) NOT NULL,[Description] NVARCHAR (MAX) NOT NULL,[TutorialUrl] NVARCHAR (MAX) NOT NULL,[TutorialContent] NVARCHAR (MAX) NULL,[Published] DATETIME NULL,[HasBeenAcceptedForPublish] BIT NOT NULL,[AdminMessageForNotPublishing] NVARCHAR (MAX) NULL,[TutorialStatus_TutorialStatusID] INT NOT NULL,[UserId] NVARCHAR (128) NULL,CONSTRAINT [PK_dbo.Tutorials] PRIMARY KEY CLUSTERED ([TutorialID] ASC),CONSTRAINT [FK_dbo.Tutorials_dbo.TutorialStatus_TutorialStatusID] FOREIGN KEY ([TutorialStatus_TutorialStatusID]) REFERENCES [dbo].[TutorialStatus] ([TutorialStatusID]) ON DELETE CASCADE,CONSTRAINT [FK_dbo.Tutorials_dbo.Users_Id] FOREIGN KEY ([UserId]) REFERENCES [dbo].[Users] ([Id]) ); GO CREATE NONCLUSTERED INDEX [IX_TutorialStatus_TutorialStatusID] ON [dbo].[Tutorials]([TutorialStatus_TutorialStatusID] ASC); GO CREATE NONCLUSTERED INDEX [IX_UserId] ON [dbo].[Tutorials]([UserId] ASC);
更新:
public Tutorial CreateNewTutorial(string TutorialTitle,string Description,string content,AppUser user,out bool success) { try { string tutorialurl = null; tutorialurl = TutorialTitle.Replace(" ","-"); Tutorial tutorial = new Tutorial(); TutorialStatus status = new TutorialStatus(); status.ViewCount = 1; status.ReputationPoints = 0; status.FavouritedCount = 0; context.TutorialStatus.Add(status); context.SaveChanges(); tutorial.TutorialTitle = TutorialTitle; tutorial.Description = Description; tutorial.TutorialUrl = tutorialurl; tutorial.User = user; tutorial.UserId = user.Id; tutorial.Published = null; //tutorial.TutorialStatusID = status.TutorialStatusID; tutorial.TutorialContent = content; context.Tutorials.Add(tutorial); context.SaveChanges(); success = true; return tutorial; } catch { success = false; return null; } }
更新2:
这是堆栈跟踪:
at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.FindRelationshipSet(ObjectContext context,EntitySet entitySet,EdmType& relationshipType,RelationshipSet& relationshipSet) at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.AttachContext(ObjectContext context,MergeOption mergeOption) at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.AttachContext(ObjectContext context,MergeOption mergeOption) at System.Data.Entity.Core.Objects.DataClasses.RelationshipManager.CreateRelatedEnd[TSourceEntity,TTargetEntity](RelationshipNavigation navigation,RelationshipMultiplicity sourceRoleMultiplicity,RelationshipMultiplicity targetRoleMultiplicity,RelatedEnd existingrelatedEnd) at System.Data.Entity.Core.Objects.DataClasses.RelationshipFixer`2.System.Data.Entity.Core.Objects.DataClasses.IRelationshipFixer.CreateSourceEnd(RelationshipNavigation navigation,RelationshipManager relationshipManager) at System.Data.Entity.Core.Objects.DataClasses.RelationshipManager.GetRelatedEnd(RelationshipNavigation navigation,IRelationshipFixer relationshipFixer) at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.GetotherEndOfRelationship(IEntityWrapper wrappedEntity) at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity,Boolean addRelationshipAsUnchanged,Boolean doAttach) at System.Data.Entity.Core.Objects.DataClasses.EntityReference`1.Include(Boolean addRelationshipAsUnchanged,Boolean doAttach) at System.Data.Entity.Core.Objects.DataClasses.RelationshipManager.AddRelatedEntitiesToObjectStateManager(Boolean doAttach) at System.Data.Entity.Core.Objects.ObjectContext.Addobject(String entitySetName,Object entity) at System.Data.Entity.Internal.Linq.InternalSet`1.<>c__displayClassd.<Add>b__c() at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action,EntityState newState,Object entity,String methodName) at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) at System.Data.Entity.DbSet`1.Add(TEntity entity) at TutorialNetworkDomain.EFRepositories.EFHomeRepository.CreateNewTutorial(String TutorialTitle,String Description,String content,Boolean& success) in C:\\Users\\Jon\\Source\\Workspaces\\TutorialNetwork\\TutorialNetwork\\TutorialNetworkDomain\\EFRepositories\\EFHomeRepository.cs:line 362
解决方法
删除此行教程.User = user;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。