I got this problem when I'm trying to install a module
AcceptChanges cannot continue because the object's key values conflict with another object in the ObjectStateManager. Make sure that the key values are unique before calling AcceptChanges.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: AcceptChanges cannot continue because the object's key values conflict with another object in the ObjectStateManager. Make sure that the key values are unique before calling AcceptChanges.
Source Error:
Line 151: ModuleInfo moduleInfo = ModuleInfo.GetModule(Constants.ModuleName, Everest.CmsServices.CmsGlobal.RootApplicationName, false);
Line 152: ModuleInstaller installer = new ModuleInstaller();
Line 153: var result = installer.Install(moduleInfo, userName);
Line 154:
Line 155: //set Installed=false;
Source File: C:\Projetos\Produtos\Framework Campanha\Kooboo\Kooboo.Module.Quiz\Configuration.cs Line: 153
Stack Trace:
[InvalidOperationException: AcceptChanges cannot continue because the object's key values conflict with another object in the ObjectStateManager. Make sure that the key values are unique before calling AcceptChanges.]
System.Data.Objects.ObjectStateManager.FixupKey(EntityEntry entry) +3345847
System.Data.Objects.ObjectStateEntry.AcceptChanges() +143
System.Data.Objects.ObjectContext.AcceptAllChanges() +212
Everest.CmsServices.Extension.Module.ModuleInstaller.CreateFolders(IEverestCmsDataContext dataContext, String application, ModuleInfo moduleInfo) +273
Everest.CmsServices.Extension.Module.ModuleInstaller.Install(ModuleInfo moduleInfo, String userName) +421
Kooboo.Module.Quiz.Configuration.Install(String userName) in C:\Projetos\Produtos\Framework Campanha\Kooboo\Kooboo.Module.Quiz\Configuration.cs:153
Kooboo.Module.Quiz.Controllers.HomeController.Install() in C:\Projetos\Produtos\Framework Campanha\Kooboo\Kooboo.Module.Quiz\Controllers\HomeController.cs:47
lambda_method(ExecutionScope , ControllerBase , Object[] ) +74
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +52
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +254
System.Web.Mvc.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() +19
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +192
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +314
System.Web.Mvc.Controller.ExecuteCore() +105
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +39
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +34
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +59
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +44
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +7
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8679150
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
here is the code of the configuration.cs
Code:
/*
Kooboo is a content management system based on ASP.NET MVC framework. Copyright 2009 Yardi Technology Limited.
This program is free software: you can redistribute it and/or modify it under the terms of the
GNU General Public License version 3 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program.
If not, see http://www.kooboo.com/gpl3/.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Web.Mvc;
using Everest.Library.ExtensionMethod;
using Everest.CmsServices.Extension.Module;
using Everest.CmsServices.Models;
namespace Kooboo.Module.Quiz
{
public class Configuration
{
/// <summary>
/// Generates module configuration
/// </summary>
public static void Generate()
{
string version = "1.0.0.1";
string frameworkVersion = "2.1.1.0";
string adminUrl = ""; // the entry url from admin panel;
//module Configuration
ModuleConfiguration moduleConfiguration = new ModuleConfiguration();
moduleConfiguration.Version = version;
moduleConfiguration.FrameworkVersion = frameworkVersion;
moduleConfiguration.AdminUrl = adminUrl;
ModuleSettingEditorCollection settings = new ModuleSettingEditorCollection();
settings.SetTheme("Default", "Default");
settings.SetUnauthorizedUrl("/unauthorized/index");
settings.SetEntryUrl("/", "/");
settings.SetEnabledPageTitle(true);
settings.SetPageTitleFormat("{0}");
// settings.AddSetting("PageSize", "20", new string[]{"20","50","100"});
settings.AddSetting("PageSize", "20", "20", "50", "100");
moduleConfiguration.Settings = settings.ToArray();
List<ModuleAssembly> assemblies = new List<ModuleAssembly>();
assemblies.Add(new ModuleAssembly() { AssemblyName = "Kooboo.Module.Quiz", Path = @"bin\Kooboo.Module.Quiz.dll", ContainsController = true });
assemblies.Add(new ModuleAssembly() { AssemblyName = "Kooboo.Module.Quiz", Path = @"bin\Kooboo.Module.Quiz.pdb", ContainsController = false });
assemblies.Add(new ModuleAssembly() { AssemblyName = "Kooboo.Module.Core", Path = @"bin\Kooboo.Module.Core.dll", ContainsController = true });
assemblies.Add(new ModuleAssembly() { AssemblyName = "Kooboo.Module.Core", Path = @"bin\Kooboo.Module.Core.pdb", ContainsController = false });
assemblies.Add(new ModuleAssembly() { AssemblyName = "Kooboo.Model.Quiz", Path = @"bin\Kooboo.Model.Quiz.dll", ContainsController = true });
assemblies.Add(new ModuleAssembly() { AssemblyName = "Kooboo.Model.Quiz", Path = @"bin\Kooboo.Model.Quiz.pdb", ContainsController = false });
moduleConfiguration.Assemblies = assemblies.ToArray();
#region Schema
Cms_Schema questionSchema = new Cms_Schema(Constants.QuestionSchemaName, SchemaType.Text);
questionSchema.Cms_Column.Add(new Cms_Column("Title", "Title", ColumnDataType.String, ControlType.Text) );
questionSchema.Cms_Column.Add(new Cms_Column("Type", "Type", ColumnDataType.String, ControlType.Text) );
questionSchema.Cms_Column.Add(new Cms_Column("Points", "Points", ColumnDataType.Decimal, ControlType.Number) );
questionSchema.Cms_Column.Add(new Cms_Column("Text", "Text", ColumnDataType.String, ControlType.Htmleditor) );
questionSchema.Cms_Column.Add(new Cms_Column("AdditionalInformation", "AdditionalInformation", ColumnDataType.String, ControlType.Textarea));
var questionSchemaFile = SerializeSchema(questionSchema);
Cms_Schema ansSchema = new Cms_Schema(Constants.AnswerSchemaName, SchemaType.Text) { IncludeUserKey = true, CategorySchemasUUID=questionSchema.UUID.ToString() };
ansSchema.Cms_Column.Add(new Cms_Column("Title", "Title", ColumnDataType.String, ControlType.Text) );
ansSchema.Cms_Column.Add(new Cms_Column("IsAnswered", "IsAnswered", ColumnDataType.Bool, ControlType.Checkbox));
ansSchema.Cms_Column.Add(new Cms_Column("IsValid", "IsValid", ColumnDataType.Bool, ControlType.Checkbox));
ansSchema.Cms_Column.Add(new Cms_Column("IsCorrected", "IsCorrected", ColumnDataType.Bool, ControlType.Checkbox));
ansSchema.Cms_Column.Add(new Cms_Column("AnswerText", "AnswerText", ColumnDataType.String, ControlType.Htmleditor));
ansSchema.Cms_Column.Add(new Cms_Column("Points", "Points", ColumnDataType.Decimal, ControlType.Number));
ansSchema.Cms_Column.Add(new Cms_Column("QuestionUUID", "QuestionUUID", ColumnDataType.String, ControlType.Text));
var ansSchemaFile = SerializeSchema(ansSchema);
Cms_Schema userSchema = new Cms_Schema(Constants.UserSchemaName, SchemaType.Text) { IncludeUserKey = true, ChildSchemas = ansSchema.UUID.ToString() };
userSchema.Cms_Column.Add(new Cms_Column("Title", "Title", ColumnDataType.String, ControlType.Text) );
userSchema.Cms_Column.Add(new Cms_Column("DateRegistered", "DateRegistered", ColumnDataType.Datetime, ControlType.DateTime));
var userSchemaFile = SerializeSchema(userSchema);
Cms_Schema quizSchema = new Cms_Schema(Constants.QuizSchemaName, SchemaType.Text) { IncludeUserKey = true, ChildSchemas = userSchema.UUID.ToString() + "," + questionSchema.UUID.ToString() };
quizSchema.Cms_Column.Add(new Cms_Column("Title", "Title", ColumnDataType.String, ControlType.Text));
quizSchema.Cms_Column.Add(new Cms_Column("Type", "Type", ColumnDataType.String, ControlType.Text) );
quizSchema.Cms_Column.Add(new Cms_Column("InitialDate", "InitialDate", ColumnDataType.Datetime, ControlType.DateTime));
quizSchema.Cms_Column.Add(new Cms_Column("FinalDate", "FinalDate", ColumnDataType.Datetime, ControlType.DateTime) );
quizSchema.Cms_Column.Add(new Cms_Column("Regulation", "Regulation", ColumnDataType.String, ControlType.Htmleditor) );
quizSchema.Cms_Column.Add(new Cms_Column("AdditionalInformation", "AdditionalInformation", ColumnDataType.String, ControlType.Textarea));
var quizSchemaFile = SerializeSchema(userSchema);
var schemas = new List<IncludeFile>();
schemas.Add(new IncludeFile() { Path = questionSchemaFile });
schemas.Add(new IncludeFile() { Path = ansSchemaFile });
schemas.Add(new IncludeFile() { Path = userSchemaFile });
schemas.Add(new IncludeFile() { Path = quizSchemaFile });
moduleConfiguration.Schemas = schemas.ToArray();
#endregion
#region Folder
var folders = new List<FolderInfo>();
folders.Add(new FolderInfo() { FolderName = Constants.ModuleFolderName });
folders[0].Children = new FolderInfo[1];
folders[0].Children[0] = new FolderInfo() { FolderName = Constants.QuizFolderName, SchemaName = Constants.QuizSchemaName };
moduleConfiguration.Folders = folders.ToArray();
#endregion
moduleConfiguration.SerializeToXml(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ModuleInfo.Const_ModuleConfigFile));
}
/// <summary>
/// Serializes the schema.
/// </summary>
/// <param name="schema">The schema.</param>
/// <returns></returns>
private static string SerializeSchema(Cms_Schema schema)
{
string schemaFile = string.Format(@"Schema\{0}.xml", schema.SchemaName);
schema.SerializeToXml(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, schemaFile));
return schemaFile;
}
/// <summary>
/// Installs module(Schema,folder)
/// </summary>
/// <param name="userName">Name of the user.</param>
/// <returns></returns>
public static string Install(string userName)
{
Generate();
ModuleInfo moduleInfo = ModuleInfo.GetModule(Constants.ModuleName, Everest.CmsServices.CmsGlobal.RootApplicationName, false);
ModuleInstaller installer = new ModuleInstaller();
var result = installer.Install(moduleInfo, userName);
//set Installed=false;
moduleInfo.Configuration.Installed = false;
moduleInfo.SaveConfiguration(moduleInfo.Configuration);
return result;
}
/// <summary>
/// Unstalls module
/// </summary>
/// <returns></returns>
public static string Uninstall()
{
ModuleInfo moduleInfo = ModuleInfo.GetModule(Constants.ModuleName, Everest.CmsServices.CmsGlobal.RootApplicationName, false);
ModuleUninstall uninstall = new ModuleUninstall();
var result = uninstall.Uninstall(moduleInfo);
return result;
}
}
}