13

我以实体框架代码优先约定的风格定义了一组类,并使用 System.ComponentModel.DataAnnotations 属性对类属性进行了注释。

现在我想从此代码生成一个 SQL Server Compact Edition (SCSE) (4.0) 数据库。

执行此操作需要哪些代码以及需要导入哪些程序集?

到目前为止,我已经导入了 C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\Desktop{System.Data.SqlServerCe.dll,System.Data.SqlServerCe.Entity\System.Data.SqlServerCe。 Entity.dll} dll 文件。

任何指针表示赞赏。文章什么的。

4

4 回答 4

15

我找到了解决方案。关键是这行代码:

DbDatabase.DefaultConnectionFactory = new 
                      SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");

这是一个完整的示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Proto
{
    using System.Data;
    using System.Data.Entity;
    using System.Data.Entity.Database;
    using System.Data.SqlServerCe;
    using System.ComponentModel.DataAnnotations;

    class Program
    {
        static void Main(string[] args)
        {
            DbDatabase.DefaultConnectionFactory = new 
                        SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
            DbDatabase.SetInitializer(
                         new DropCreateDatabaseIfModelChanges<ProtoCatalog>()
                  );

            using (var db = new ProtoCatalog())
            {
                var user = new User
                {
                    Name = "bob",
                    Password = "123",
                    Creation = DateTime.Now,
                    PrimaryEmailAddress = "bob@example.com"
                };

                db.Users.Add(user);

                db.SaveChanges();

                Console.ReadKey();
            }
       }
    }

    public class ProtoCatalog : DbContext
    {
        public DbSet<User> Users { get; set; }
    }

    public class User
    {
        [Key, StringLength(50)]
        public string Name { get; set; }

        [Required, StringLength(100)]
        public string Password { get; set; }

        [Required, StringLength(320)]
        public string PrimaryEmailAddress { get; set; }

        [StringLength(320)]
        public string SecondaryEmailAddress { get; set; }

        [Required]
        public DateTime Creation { get; set; }

        public bool Active { get; set; }
    }
}

API 可能会在 EF Code-First CTP 5 和 RTM 之间发生变化,但这就是现在的做法。

我已经写了一篇关于它的小博客文章

于 2011-01-31T05:06:31.043 回答
2

请参阅此博客和相同的链接(例如 ScottGu 文章):http ://erikej.blogspot.com/2011/01/sql-server-compact-40-released.html

于 2011-01-30T10:01:46.533 回答
2

我发现最好的方法是安装 NuGet 并使用 EF CodeFirst 和 SQL CE 4 包,还有一个可以从 NuGet 安装的示例,其中包含所有数据库创建策略的代码示例。你会做这样的事情:

install-package EFCodeFirst.SqlServerCompact
install-package EFCodeFirst.Sample

在项目目录的根目录中应该有一个名为“AppStart_SQLCEEntityFramework.cs”的文件,请参阅该文件以获取示例。

于 2011-01-30T10:21:50.893 回答
2

提供 DefaultConnectionProvider 的另一种方法是在 app.config 中添加它。

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="System.Data.SqlServerCe.4.0" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>
于 2012-08-23T07:34:40.017 回答