我一直在寻找一个很好的解决方案来实现在SQL Server Compact 3.5数据库上管理模式的想法.
我知道在SQL Server Express,SQL Server Standard,SQL Server Enterprise 上管理模式的几种方法,但Compact Edition不支持使用相同方法所需的必要工具.
有什么建议/提示吗?
我应该扩展这个说它是100多个带有包装软件的客户端.随着系统的变化,我需要将更新脚本与新二进制文件一起发布到客户端.我正在寻找一种不错的方法来发布它,而不必只是将客户端的脚本文件交给客户端并说"在SSMSE中运行它".大多数客户都无法做这样的野兽.
我的一个伙伴披露了关于如何处理我的任务的SQL Server部分的部分脚本,但从未在Compact Edition上工作过.看起来我会独自一人为此.
我认为我已经决定要做的,并且需要一个"极客周"来完成,就是编写一些类似于WiX和NAnt工作方式的工具,这样我就可以编写一个过于热心的XML文档处理工作.
如果我认为这是值得的,我会发布在CodePlex上和/或代码项目,因为我们使用这两个网站一点,以获得更好的理解概念的职位,我在过去所做的,我认为这回馈一点可能是值得的.
2010年5月3日编辑:
如果有人愿意"命名"该项目,我会将我为MS SQL编写的脏/讨厌版本上传到CodePlex,这样我们就可以开始攻击SQL Compact版本了.虽然,我认为在我计划的初始应用程序的下一版本中,我将放弃SQL Compact并仅使用XML文件进行存储,因为该软件正在从Installable包转换为Silverlight应用程序.Silverlight只是提供了更好的访问策略.
是否有用于管理 SQL CE 4 数据库的良好 GUI 工具?例如,不需要我编写创建表语句的东西。
我有一个已发布到市场的 Windows Phone 7 应用程序。我将 Sql CE 与 LinqToSql 一起使用。当应用程序运行时,它会从连接字符串中检查数据库是否存在,如果不存在则创建。
using (CheckbookDataContext db = new CheckbookDataContext(DBConnectionString))
{
if (!db.DatabaseExists())
{
isNewLoad = true;
db.CreateDatabase();
}
}
Run Code Online (Sandbox Code Playgroud)
当我开始计划新功能时,我预见到数据库模式会发生一些变化,无论是向现有表添加新列、添加新表等。
如何去更新已经存在的数据库?既然数据库已经存在,我是否必须手动执行 ALTER 和 CREATE 表语句来进行调整?
当使用超过 8000 字节数据的 BLOB 时,您需要专门设置Parameter.SqlDbType = SqlDbType.Image才能使其工作(如此处所述)。
Dapper,当它看到一个byte[]字段时,默认为 a SqlDbType.Binary,这意味着对于较大的 blob,插入和更新将失败并出现数据截断错误。
这个问题有优雅的解决方案吗?我能看到的唯一选择是使用 ADO.NET 方法对整个事务进行编码。
我一直在寻找解决方案,但不知道我哪里做错了。但我是第一次这样做。
我有一个班级学生
class Students
{
public Image photo { get; set; }
public bool AddStudent(Students _student)
{
Settings mySettings = new Settings();
SqlCeConnection conn = new SqlCeConnection(mySettings.StudentsConnectionString);
SqlCeCommand cmd = new SqlCeCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.Connection = conn;
cmd.CommandText = "insert into students (firstname, lastname, dob, allergic, allergydetails, memo, address, photo) " +
"Values (" +
"'" + @FirstName + "'," +
"'" + @LastName + "'," +
"'" + @Dob + "'," +
"'" + @isAllergic + "'," + …Run Code Online (Sandbox Code Playgroud) 使用标准方法升级我的数据库需要7秒,这太慢了,因为我的数据库有3个表,每个表有5个字段,几乎没有数据.
var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
//Update database to latest migration
migrator.Update();
Run Code Online (Sandbox Code Playgroud)
使用Entity Framework 6.0.
每次启动我的应用程序时,此代码都会运行,这会影响我的性能.为什么这么慢?无论如何要加快速度?
这是我的app.config:
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
Run Code Online (Sandbox Code Playgroud) c# sql-server-ce entity-framework-4 ef-code-first ef-migrations
我使用C#System.Data.SqlServerCe版本3.5.1.0来创建.SDF数据库文件.在创建后打开连接时,我有时会收到以下错误:
数据库文件可能已损坏.运行修复实用程序以检查数据库文件.[数据库名称= \?\ C:\ SomeDatabase.sdf]
"修理工具"在哪里?我们如何使用它?
我搜索了Google和StackOverflow以获得答案:
这篇MSDN文章讨论了以编程方式执行此操作.有命令行方法吗?
我在使用EntityFramework和以下数据模型时遇到了一些麻烦(参见简化图).

Matter对象可以被认为是"主要容器".有Bill和BillRecord.从Bill到BillRecord有一对多的关联.确切地说,Bill可以引用许多BillRecord(可能是0),BillRecord最多可以引用一个Bill.
1)我希望能够删除BillRecord但是如果存在关联则不应该删除Bill(这就是为什么我没有在BillRecords实体上设置OnCascadeDelete For Bill).同样,如果我删除一个账单,我不想删除可能与之关联的BillRecord.
2)然而,当我删除一个问题时,我希望一切都消失:问题,比尔和比尔记录.
使用以下代码,如果没有与Bill相关联的BillRecord,我设法有1)正确和2)工作,如果有,我得到以下错误.
System.Data.SqlServerCe.SqlCeException: The primary key value cannot be deleted because references to this key still exist. [ Foreign key constraint name = FK_dbo.BillRecordDboes_dbo.BillDboes_BillId ]
Run Code Online (Sandbox Code Playgroud)
这是我的实体和OnModelCreating的逻辑
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MatterDbo>().HasMany<BillRecordDbo>(s => s.BillRecordDbos)
.WithRequired(s => s.Matter).HasForeignKey(s => s.MatterId).WillCascadeOnDelete(true);
modelBuilder.Entity<MatterDbo>().HasMany<BillDbo>(s => s.BillDbos)
.WithRequired(s => s.Matter).HasForeignKey(s => s.MatterId).WillCascadeOnDelete(true);
}
public class MatterDbo
{
public MatterDbo()
{
BillDbos = new List<BillDbo>();
BillRecordDbos = new List<BillRecordDbo>();
}
public Guid Id { get; set; }
public virtual List<BillDbo> …Run Code Online (Sandbox Code Playgroud) 如果支持,我应该安装哪个包才能使用 SQL Server CE?谢谢。
包 Microsoft.SqlServer.Compact 4.0.8876.1 与 netcoreapp1.0 (.NETCoreApp,Version=v1.0) 不兼容。
包 EntityFrameworkCore.SqlServerCompact40 1.0.0.3 与 netcoreapp1.0 (.NETCoreApp,Version=v1.0) 不兼容。
我创建了一个桌面应用程序,它使用SQL CE 4.0和具有Code First模式的实体 框架。所以,最初我在系统上安装了应用程序,它运行良好。
现在,我向模型类添加了一些属性,因此为此目的,我使用 启用了迁移Enable-Migrations,并使用Add-Migration "MyMigration". 这也很成功,我能够安装新版本并升级数据库,没有任何问题。
但是现在,当我在没有现有数据库的系统上安装此设置时,它会失败,所以经过研究,我意识到我需要添加初始迁移所以,我撤销了模型中的更改,还删除了我的 SQLCE 数据库文件,添加了初始迁移,然后Update-Database。因此,如果我尝试使用在未启用迁移的情况下创建的旧数据库来更新数据库,那么它会失败,它会尝试将初始迁移应用于数据库,但根据我的说法,它不应该这样做。
现在,如果我删除旧数据库文件,然后删除更新数据库,则会创建新数据库,然后再次将我的更改添加到模型并添加预期迁移。
因此,在此之后,周转我可以在空白系统上安装我的应用程序,但它在具有旧数据库的系统上失败,即它不会升级数据库。
它也尝试应用初始迁移,即再次创建所有表,但失败并提示“该表已存在,这是意外的”。
c# entity-framework sql-server-ce ef-code-first entity-framework-migrations
sql-server-ce ×10
c# ×6
asp.net-core ×1
blob ×1
dapper ×1
entity-framework-migrations ×1
linq-to-sql ×1
sql ×1
sql-server ×1