【问题标题】:null id Orchard repository creation Id identity onnull id Orchard 存储库创建 Id 标识 on
【发布时间】:2015-01-27 16:43:28
【问题描述】:

我使用 Orchard 使用此代码创建一个新条目

_repository.Create(new GMapZonePartRecord {
                Name = model.Name,
                Description = model.Description,
                Commune = model.Commune,
                Quarter = model.Quarter,
                Price = model.Price,
                StartZoom = model.StartZoom,
                StopZoom = model.StopZoom,
                Color = model.Color,
                GMapPartRecord = partRecord
            });

其中 _repository 是 IRepository。 我的代码很久以前就可以工作了,现在我遇到了异常 我的列 id 是 migration.cs 上和中的身份:

SchemaBuilder.CreateTable("GMapZonePartRecord",
            table => table
                .Column<int>("Id", col => col.PrimaryKey().Identity())
                .Column<string>("Name")
                .Column<string>("Description")
                .Column<string>("Color")
                .Column<int>("GMapPartRecord_Id"));

这里是错误的详细信息:

JooWeb.GMap.Models.GMapZonePartRecord 条目中的空 id(发生异常后不要刷新 Session)

描述 : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle。 Contrôlez la trace de la pour pour plus d'informations sur l'erreur et son origine dans le code。

details de l'exception: NHibernate.AssertionFailure: null id in JooWeb.GMap.Models.GMapZonePartRecord entry(发生异常后不要刷新 Session)

错误来源:

林 159 : } 利涅 160: Ligne 161:退货标准 第 162 节:.List() Ligne 163 : .Select(x => ContentManager.Get(x.ContentItemRecord.Id, _versionOptions != null && _versionOptions.IsDraftRequired ? _versionOptions : VersionOptions.VersionRecord(x.Id))))

Fichier 来源:c:\Users\JLA\Google Drive\Jooweb\Projects\Orchard.Source.1.7\src\Orchard\ContentManagement\DefaultContentQuery.cs Ligne : 161

Trace de la Pile:

[AssertionFailure: null id in JooWeb.GMap.Models.GMapZonePartRecord entry (don't flush the Session after an exception occurs)]
   NHibernate.Event.Default.DefaultFlushEntityEventListener.CheckId(Object obj, IEntityPersister persister, Object id, EntityMode entityMode) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\DefaultFlushEntityEventListener.cs:111
   NHibernate.Event.Default.DefaultFlushEntityEventListener.GetValues(Object entity, EntityEntry entry, EntityMode entityMode, Boolean mightBeDirty, ISessionImplementor session) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\DefaultFlushEntityEventListener.cs:81
   NHibernate.Event.Default.DefaultFlushEntityEventListener.OnFlushEntity(FlushEntityEvent event) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\DefaultFlushEntityEventListener.cs:36
   NHibernate.Event.Default.AbstractFlushingEventListener.FlushEntities(FlushEvent event) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\AbstractFlushingEventListener.cs:161
   NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions(FlushEvent event) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\AbstractFlushingEventListener.cs:60
   NHibernate.Event.Default.DefaultAutoFlushEventListener.OnAutoFlush(AutoFlushEvent event) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Event\Default\DefaultAutoFlushEventListener.cs:30
   NHibernate.Impl.SessionImpl.AutoFlushIfRequired(ISet`1 querySpaces) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:1182
   NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:1959
   NHibernate.Impl.CriteriaImpl.List(IList results) in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\CriteriaImpl.cs:265
   NHibernate.Impl.CriteriaImpl.List() in c:\Users\sebros\Documents\My Projects\nhibernate-core\src\NHibernate\Impl\CriteriaImpl.cs:276
   Orchard.ContentManagement.DefaultContentQuery.Slice(Int32 skip, Int32 count) in c:\Users\JLA\Google Drive\Jooweb\Projects\Orchard.Source.1.7\src\Orchard\ContentManagement\DefaultContentQuery.cs:161
   Orchard.ContentManagement.ContentQuery`1.Orchard.ContentManagement.IContentQuery<T>.List() in c:\Users\JLA\Google Drive\Jooweb\Projects\Orchard.Source.1.7\src\Orchard\ContentManagement\DefaultContentQuery.cs:262
   Orchard.Widgets.Filters.WidgetFilter.OnResultExecuting(ResultExecutingContext filterContext) +4348
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +193
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +529
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +529
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +529
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +529
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +529
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +529
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +529
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +106
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +321
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +185
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
   Orchard.Mvc.Routes.HttpAsyncHandler.EndProcessRequest(IAsyncResult result) in c:\Users\JLA\Google Drive\Jooweb\Projects\Orchard.Source.1.7\src\Orchard\Mvc\Routes\ShellRoute.cs:159
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9676252
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

感谢您的帮助,我真的不知道在哪里搜索。

编辑: 添加 Nhibernate 3.3.X 的源后,我发现检查失败的不是 ContentItemRecord 的空值。 有什么想法吗?

【问题讨论】:

    标签: c# nhibernate orm orchardcms orchardcms-1.8


    【解决方案1】:

    您永远不应该使用Repository&lt;TRecord&gt; 来创建零件记录(而且您几乎永远不应该使用Repository&lt;TRecord&gt;,句号)。使用您的代码,您创建了与内容项不对应的孤立部分记录。相反,请使用ContentManager 上的 API,它会负责为您创建所有相关记录。

    【讨论】:

    • 感谢您的建议,但这正是我想要的。我只有 GmapZonePartRecord 而不是 GmapZonePart 作为 ContentPart。我只想使用 repo 在 DB 中插入数据。
    • 为什么叫 GmapZonePartRecord 而不是 GmapZoneRecord?
    • Euuh ...我想我应该这样重命名它:)
    【解决方案2】:

    为了调试,我从https://github.com/nhibernate/nhibernate-core/tree/3.3.x 下载 NHibernate 源代码 并发现 null 值不是 id 就像错误消息让我们思考的那样,而是 ContentItemRecord。

    所以我只是为此添加新的价值:

    _repository.Create(new GMapZonePartRecord
                {
                    Name = model.Name,
                    Description = model.Description,
                    Commune = model.Commune,
                    Quarter = model.Quarter,
                    Price = model.Price,
                    StartZoom = model.StartZoom,
                    StopZoom = model.StopZoom,
                    Color = model.Color,
                    GMapPartRecord = partRecord,
                    ContentItemRecord = new ContentItemRecord()
                });
    

    现在一切正常:)

    【讨论】:

    • 除了现在您可能正在创建没有类型或部分的内容项记录。我不确定这会不会回来咬你。
    • 对不起,我听不懂你说什么。 contentItemRecord 不是保持记录版本控制的简单记录吗?有我不需要的部分的链接?
    • 不,内容项记录代表内容项。
    猜你喜欢
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2011-06-26
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多