Entity Framework 6 和 SQL Server CE,代码优先

问题描述

我正在使用实体框架(代码优先方法)和 sql Server CE 数据库

我遇到的问题是未创建 sql Server CE 数据库,并且似乎未使用 app.config 文件,因为连接 (sqllocaldb) 中存在错误的连接字符串。

项目:

  • SaltMgr调用 SaltMgr.Data 的 WPF 应用)

MainWindow 中的代码仅用于测试调用

        var rep = new WiegedatenRepository();
        var xx = rep.List();

SaltMgr.Data - DbContext

using SaltMgr.Data.Model;
using System;
using System.Configuration;
using System.Data.Common;
using System.Data.Entity;
using System.Data.sqlServerCe;

namespace SaltMgr.Data.DAL
{
    public class RepositoryContext : DbContext
    {
        static RepositoryContext()
        {
            try
            {
                // Database initialize
                Database.Setinitializer<RepositoryContext>(new DbInitializer());

                using (var db = new RepositoryContext())
                {
                    db.Database.Initialize(false);
                    db.Database.CreateIfNotExists();
                }
            }
            catch(Exception)
            {
                throw;
            }
        }

        public DbSet<Wiegedaten> Wiegedaten { get; set; }
    }

    class DbInitializer : CreateDatabaseIfNotExists<RepositoryContext>
    {
    }
}

app.config 文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    </configSections>
    
    <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>
    
    <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,PublicKeyToken=89845dcd8080cc91"/>
        </DbProviderFactories>
    </system.data>
    
    <connectionStrings>
        <add name="SaltMgr.Data.DAL.RepositoryContext" providerName="System.Data.sqlServerCe.4.0" connectionString="Data Source=C:\Sourcecode\SaltMgr\Database\SaltMGrdatabase.sdf"/>
    </connectionStrings>
    
</configuration>

还有 Wiegedaten 模型类:

using System;
using System.ComponentModel.DataAnnotations;

namespace SaltMgr.Data.Model
{
    public class Wiegedaten
    {
        [Key]
        public int Id { get; set; }

        [required]
        public int LaufendeNummer { get; set; }

        [required]
        public DateTime Datum { get; set; }

        [required]
        [StringLength(100)]
        public string Kundenname { get; set; }

        [required]
        [StringLength(100)]
        public string Entnehmername { get; set; }

        [required]
        public int Tara { get; set; }

        [required]
        public int Brutto { get; set; }

        [required]
        public int Netto { get; set; }

        [required]
        public int AlibiNummer { get; set; }
    }
}

有人有解决方案吗?为什么这不起作用?

Project download

解决方法

您必须将配置(app config)内容移动到您的可执行项目中,它对其他项目没有影响。 因此,您的数据库已在 LocalDB 实例中正确创建! 执行此操作后,SQL 提供程序会按预期启动。