加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Entity Framework抛出异常:index超出了数组的范围

发布时间:2020-12-15 22:17:38 所属栏目:百科 来源:网络整理
导读:我一直在努力为’AspNetUsers’表提供一把外键. 我将表重命名为SQL Server数据库中的用户只是为了澄清.我的Tutorial表中有一个外键到Users表.这是我的Tutorial表的EF模型类: public class Tutorial{ [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
我一直在努力为’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:UsersJonSourceWorkspacesTutorialNetworkTutorialNetworkTutorialNetworkDomainEFRepositoriesEFHomeRepository.cs:line 362

解决方法

删除此行教程.User = user;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读