Создание базы данных SQL CE из класса EF Code-First DbContext - PullRequest
13 голосов
/ 29 января 2011

Я определил набор классов в стиле соглашений Entity Framework Code-First и аннотировал свойства класса с помощью атрибутов System.ComponentModel.DataAnnotations.

Теперь я хочу создать SQL Server Compact Edition.(SCSE) (4.0) базы данных из этого кода.

Какой код необходим для этого и какие сборки необходимо импортировать?

До сих пор я импортировал C: \ Program Files(x86) \ dll файлы Microsoft SQL Server Compact Edition \ v4.0 \ Desktop {System.Data.SqlServerCe.dll, System.Data.SqlServerCe.Entity \ System.Data.SqlServerCe.Entity.dll}.

Любые указатели приветствуются.Статьи и еще много чего.

Ответы [ 4 ]

15 голосов
/ 31 января 2011

Я нашел решение. Критическая вещь - эта строка кода:

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, но сейчас это так.

Я сделал небольшое сообщение в блоге об этом.

2 голосов
/ 23 августа 2012

Еще один способ предоставить DefaultConnectionProvider - добавить его в app.config.

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="System.Data.SqlServerCe.4.0" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>
2 голосов
/ 30 января 2011

Лучший способ, который я нашел, - это установить NuGet и поиграть с пакетами EF CodeFirst и SQL CE 4, также есть пример, который вы можете установить из NuGet, который имеет примеры кода для всех стратегий создания БД. Вы бы сделали что-то вроде:

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

В корневом каталоге вашего проекта должен находиться файл с именем «AppStart_SQLCEEntityFramework.cs», см. Примеры.

2 голосов
/ 30 января 2011

Смотрите этот блог и ссылки в том же (например, в статье ScottGu): http://erikej.blogspot.com/2011/01/sql-server-compact-40-released.html

...