0

我有一个干净的 MVC 3 项目,并为安全帐户使用 SqlCe 成员资格提供程序。

当我在连接字符串中指定成员资格提供程序和实体框架使用相同的“数据库”时,我会在 EF Code First 模型中得到一个未找到表的错误

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|db.sdf" providerName="System.Data.SqlServerCE.4.0" />
    <add name="SqlDbContext" connectionString="Data Source=|DataDirectory|db.sdf" providerName="System.Data.SqlServerCE.4.0" />
  </connectionStrings>

但是,如果我指定不同的数据库名称,那么我会完美地工作 - 尽管它会创建两个单独的 SDF 文件。以下连接字符串有效:

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|aspnet.sdf" providerName="System.Data.SqlServerCE.4.0" />
    <add name="SqlDbContext" connectionString="Data Source=|DataDirectory|db.sdf" providerName="System.Data.SqlServerCE.4.0" />
  </connectionStrings>

为什么它只在我指定两个单独的 SDF 表时才有效?以及如何将单个 SDF 数据库用于会员提供者和 ef 模型?

4

2 回答 2

1

您的问题的原因是用于表创建的代码优先内部逻辑。除 EF 5.0 RC 之外的所有版本都将仅与数据库一起创建表。如果数据库存在并且您没有使用能够删除数据库的初始化策略,则不会创建您的表。反过来,如果您使用删除数据库的策略,您将丢失您的成员表。

您可以创建自定义数据库初始化程序,在现有数据库中创建表,或者自定义数据库初始化程序将执行 DDL 脚本以在 Seed 方法中创建成员表,或者您可以尝试EF 5.0 RC,它应该能够在现有数据库中创建表盒子。

或者,您也可以让代码先创建数据库,然后手动添加成员表,但每次您让代码先重新创建数据库(不使用迁移时)时,它都会删除您的成员表,您必须再次手动添加它们。

于 2012-06-01T10:28:02.547 回答
0

我正在为我正在开发的网站滚动我自己的会员/角色/个人资料管理员并遇到了这个问题。这个问题我有点晚了,但如果你还在研究这个问题,这个链接应该会对你有所帮助:http: //imar.spaanjaars.com/563/using-entity-framework-code-first-and-aspnet -会员-在一起

高温高压

于 2012-12-05T15:51:29.173 回答