C# 用于存储数据的数据库替代方案?

C# 用于存储数据的数据库替代方案?,c#,database,C#,Database,我的应用程序使用的是SQL Server Compact Edition本地数据库。但是,当我使用实体框架时,我一直遇到一个非常恼人的UpdateException。我的数据库只有两个带有外键关系的小表,将它们链接在一起。所以我想问的是,除了数据库,是否还有其他选择?或者这是唯一的选择? 更新: 这是EDMX地图。 以下是异常的stacktrace: System.Windows.Markup.XamlParseException未处理 Message=无法创建程序集“AssignmentOrg

我的应用程序使用的是SQL Server Compact Edition本地数据库。但是,当我使用实体框架时,我一直遇到一个非常恼人的UpdateException。我的数据库只有两个带有外键关系的小表,将它们链接在一起。所以我想问的是,除了数据库,是否还有其他选择?或者这是唯一的选择? 更新: 这是EDMX地图。 以下是异常的stacktrace: System.Windows.Markup.XamlParseException未处理 Message=无法创建程序集“AssignmentOrganizer,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”中定义的“MainWindow”的实例。调用的目标已引发异常。标记文件“AssignmentOrganizer”中出错;组件/主窗口.xaml'第1行位置9。 Source=PresentationFramework 行号=1 LinePosition=9 堆栈跟踪: 在System.Windows.Markup.XamlParseException.ThroweExceptionString消息中,异常innerException、Int32 lineNumber、Int32 linePosition、Uri baseUri、XamlObjectId CurrentXamlObjectId、XamlObjectId ContextXamlObjectId、类型objectType 位于System.Windows.Markup.XamlParseException.ThroweExceptionParserContext parserContext、Int32 lineNumber、Int32 linePosition、字符串消息、异常innerException 在System.Windows.Markup.BamlRecordReader.ThroweExceptionWithLineString消息中,异常innerException 在System.Windows.Markup.BamlRecordReader.CreateInstanceFromTypeType、Int16 typeId、Boolean throwOnFail中 在System.Windows.Markup.BamlRecordReader.GetElement和FlagsBamlElement开始记录bamlElementStartRecord、Object和element、ReaderFlags和flags、Type和delayCreatedType、Int16和delayCreatedTypeId 位于System.Windows.Markup.BamlRecordReader.BaseReadElementStartRecordBamlElementStartRecord BamlElementsStartRecord bamlElementRecord 位于System.Windows.Markup.BamlRecordReader.ReadElementStartRecordBamlElementsStartRecord BamlElementsStartRecord bamlElementRecord 位于System.Windows.Markup.BamlRecordReader.ReadRecordBamlRecord bamlRecord bamlRecord 位于System.Windows.Markup.BamlRecordReader.ReadBoolean singleRecord 位于System.Windows.Markup.TreeBuilderBamlTranslator.ParseFragment 位于System.Windows.Markup.TreeBuilder.Parse 位于System.Windows.Markup.XamlReader.LoadBamlStream、ParserContext、ParserContext、对象父对象、布尔closeStream 在System.Windows.Application.LoadBamlStreamWithSyncInfoStream,ParserContext pc 在System.Windows.Application.LoadComponentUri resourceLocator上,布尔bSkipJournaledProperties 位于System.Windows.Application.DoStartup 在System.Windows.Application.b\u\u 0未使用对象 在System.Windows.Threading.ExceptionWrapper.InternalRealCallDelegate回调中,对象args,布尔isSingleParameter 位于System.Windows.Threading.ExceptionWrapper.TryCatchWhenObject源、委托回调、对象args、布尔isSingleParameter、委托catchHandler 在System.Windows.Threading.Dispatcher.WrappedInvokeDelegate回调中,对象args、布尔isSingleParameter、委托catchHandler 位于System.Windows.Threading.DispatcherOperation.InvokeImpl 在System.Windows.Threading.DispatcherOperation.InvokeInSecurityContextObject状态下 位于System.Threading.ExecutionContext.runTryCodeObject userData 在System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuarantedCleanuptryCode、CleanupCode backoutCode、Object userData 位于System.Threading.ExecutionContext.RunInternalExecutionContext ExecutionContext,ContextCallback回调,对象状态 位于System.Threading.ExecutionContext.RunExecutionContext ExecutionContext,ContextCallback回调,对象状态 在System.Windows.Threading.DispatcherOperation.Invoke 位于System.Windows.Threading.Dispatcher.ProcessQueue 位于System.Windows.Threading.Dispatcher.wndprochookintpr hwnd、Int32 msg、IntPtr wParam、IntPtr lParam、Boolean和handled 在MS.Win32.HwndWrapper.WndProcIntPtr hwnd、Int32 msg、IntPtr wParam、IntPtr lParam、Boolean和handled 在MS.Win32.HwndSubclass.dispatchercallbackoperation对象上 在System.Windows.Threading.ExceptionWrapper.InternalRealCallDelegate回调中,对象args,布尔isSingleParameter 位于System.Windows.Threading.ExceptionWrapper.TryCatchWhenObject源、委托回调、对象args、布尔isSingleParameter、委托catchHandler 在System.Windows.Threading.Dispatcher.WrappedInvokeDelegate回调中,对象args、布尔isSingleParameter、委托catchHandler 位于System.Windows.Threading.Dispatcher.InvokeImplDispatcherPriority、TimeSpan超时、委托方法、对象参数、布尔isSingleParameter 位于System.Windows.Threading.Dispatcher.InvokeDispatcherPriority,委托方法,对象参数 在MS.Win32.HwndSubclass.SubclassWndProcIntPtr hwnd、Int32 msg、IntPtr wParam、IntPtr lParam 位于MS.Win32.unsafentivemethods.DispatchMessageMSG&m sg 在System.Windows.Threading.Dispatcher.PushFrameImplDispatcherFrame中 在System.Windows.Threading.Dispatcher.PushFrameDispatcherFrame上 在System.Windows.Threading.Dispatcher.Run上 在System.Windows.Application.RunDispatcherObject上忽略 在System.Windows.Application.RunInternalWindow窗口 在System.Windows.Application.RunWindow窗口 在System.Windows.Application.Run 在C:\Users\Mohit\Documents\Visual Studio 2010\Projects\AssignmentOrganizer\AssignmentOrganizer\obj\x86\Debug\App.g.cs中的AssignmentOrganizer.App.Main:第0行 在System.AppDomain.\u nexecutateAssemblyAssembly程序集中,字符串[]args 在System.AppDomain.ExecuteAssemblyString assemblyFile中,证据assemblySecurity,字符串[]args 位于Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly 在System.Threading.ThreadHelper.ThreadStart_ContextObject状态下 位于System.Threading.ExecutionContext.RunExecutionContext ExecutionContext,ContextCallback回调,对象状态 位于System.Threading.ThreadHelper.ThreadStart InnerException:System.Reflection.TargetException Message=调用目标已引发异常。 Source=mscorlib 堆栈跟踪: 在System.RuntimeTypeHandle.CreateInstanceRuntimeType类型、Boolean publicOnly、Boolean noCheck、Boolean&canBeCached、RuntimeMethodHandle&ctor、Boolean&bNeedSecurityCheck中 在System.RuntimeType.CreateInstanceSlowBoolean publicOnly上,布尔fillCache 在System.RuntimeType.CreateInstanceImplBoolean publicOnly、Boolean skipVisibilityChecks和Boolean fillCache中 在System.Activator.CreateInstanceType类型中,布尔值为非公共 在System.Windows.Markup.BamlRecordReader.CreateInstanceFromTypeType、Int16 typeId、Boolean throwOnFail中 InnerException:System.Data.UpdateException 消息=更新条目时出错。有关详细信息,请参见InnerException。 Source=System.Data.Entity 堆栈跟踪: 位于System.Data.Mapping.Update.Internal.UpdateTranslator.UpdateEntityStateManager stateManager,IENTITY适配器 位于System.Data.EntityClient.EntityAdapter.UpdateEntityStateManager entityCache 位于System.Data.Objects.ObjectContext.SaveChangesBoolean acceptChangesDuringSave 位于System.Data.Objects.ObjectContext.SaveChanges 在C:\Users\Mohit\Documents\Visual Studio 2010\Projects\AssignmentOrganizer\AssignmentOrganizer\AssignmentOrganizer\App\u Data.AssignmentRepository.createAssignmentAssignmentToCreate中创建。cs:第20行 在C:\Users\Mohit\Documents\Visual Studio 2010\Projects\AssignmentOrganizer\AssignmentOrganizer\MainWindow.xaml.cs中的AssignmentOrganizer.MainWindow..ctor中:第34行 InnerException:System.Data.EntityCommandCompilationException Message=准备命令定义时出错。有关详细信息,请参见内部异常。 Source=System.Data.Entity 堆栈跟踪: 位于System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommandDbModificationCommandTree commandTree 在System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommandUpdateTranslator translator translator中,字典2标识值 在System.Data.Mapping.Update.Internal.DynamicUpdateCommand.ExecuteUpdateTranslator translator、EntityConnection、Dictionary2 identifierValues和List1 generatedValues中 位于System.Data.Mapping.Update.Internal.UpdateTranslator.UpdateEntityStateManager stateManager,IENTITY适配器 InnerException:System.NotSupportedException Message=SQL Server Compact不支持服务器生成的密钥和服务器生成的值。 Source=System.Data.SqlServerCe.Entity 堆栈跟踪: 在System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateReturningSqlStringBuilder commandText、DbModificationCommandTree树、ExpressionTranslator translator、DbExpression返回 在System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateInsertSqlDbInsertCommandTree上,列表1和参数,布尔isLocalProvider 在System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSqlDbCommandTree树上,列出列表1和参数,CommandType和CommandType,布尔isLocalProvider 位于System.Data.SqlServerCe.SqlCeProviderServices.CreateCommandDbProviderManifest providerManifest、DbCommandTree commandTree 位于System.Data.SqlServerCe.SqlCeProviderServices.CreateDbCommandDefinitionDbProviderManifest providerManifest、DbCommandTree commandTree 位于System.Data.Common.DbProviderS services.CreateCommandDefinitionDbCommandTree commandTree 位于System.Data.Common.DbProviderServices.CreateCommandDbCommandTree commandTree 位于System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommandDbModificationCommandTree commandTree 内部异常:
`

如果没有太多的数据,XML文件可以正常工作。但是很难说,没有更多的系统知识。

如果没有太多的数据,XML文件就可以工作。但是很难说,没有更多的系统知识。

使用关系数据库的主要原因是确保数据完整性和关系


如果没有外键约束,只需将其存储为平面文件excel、xml等。

使用关系数据库的主要原因是确保数据完整性和关系


如果您可以不使用外键约束,只需将其存储为平面文件excel、xml等。

总有其他选择。问题是它们是否比数据库更好。您可以将数据存储为XML或您自己的文件格式,等等。然后您必须编写适当的查询、更新代码等。这可能很好,但如果没有更多信息,我们不可能这么说


然而,在考虑另一种解决方案之前,我会弄清为什么会出现异常。当您更改存储层时,很可能会出现一些您没有预料到的行为,这些行为同样会对您造成伤害,而且在这一点上很难进行诊断。一旦你弄清楚了当前方法不起作用的原因,你就可以更好地知道它是否值得改变。

总是有替代方案的。问题是它们是否比数据库更好。您可以将数据存储为XML或您自己的文件格式,等等。然后您必须编写适当的查询、更新代码等。这可能很好,但如果没有更多信息,我们不可能这么说


然而,在考虑另一种解决方案之前,我会弄清为什么会出现异常。当您更改存储层时,很可能会出现一些您没有预料到的行为,这些行为同样会对您造成伤害,而且在这一点上很难进行诊断。一旦你弄清楚了当前方法不起作用的原因,你就可以更好地了解它是否值得改变。

也是一个不错的选择。无需安装服务器。

也是一个不错的选择。无需安装服务器。

您选择DB实现可能有一个很好的理由,特别是在关系和完整性很重要的情况下。试着弄清楚为什么你会遇到异常——如果它是SQL CE事件,那么你可以考虑替代ESE JET,这是所有Windows安装的一部分,并且更健壮。

也许有一个很好的理由,你选择了一个DB实现,特别是如果关系和完整性是重要的。试着弄清楚为什么你会遇到异常——如果它是SQL CE事件,那么你可以考虑替代ESE JET,这是所有Windows安装的一部分,并且更健壮。< /P>你能给出一个你在两个表中存储的数据类型的例子吗?我想说的是XML文件,但在开始回答之前最好先看一些数据示例。找出导致UpdateException的原因并修复它,而不是转储数据库,不是更好吗?我的更新是否回答了您的问题?您能举一个示例说明存储在两个表中的数据类型吗?我想说的是XML文件,但在开始回答之前最好先看一些数据示例。找出导致UpdateException的原因并修复它而不是转储数据库不是更好吗?我的更新回答了您的问题吗?SQL Server Compact Edition也不需要服务器。与SQLite一样,它在进程中运行。实际的基于SQL Server服务的数据库不需要您安装SQL Server吗?我想?SQL Server Compact Edition也不需要服务器。与SQLite一样,它在进程中运行。实际的基于SQL Server服务的数据库不需要您安装SQL Server吗?我想?