如何让asp.net成员提供者和实体框架共享同一个数据库
Posted
技术标签:
【中文标题】如何让asp.net成员提供者和实体框架共享同一个数据库【英文标题】:How to make asp.net member provider and entity framework share the same database 【发布时间】:2012-06-01 02:49:43 【问题描述】:我有一个干净的 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 模型?
【问题讨论】:
是否手动为 EF 创建数据库表? 不,我使用的是代码优先方法,因此希望自动创建表 - 事实上,这些表是使用第二个配置自动创建的 【参考方案1】:您的问题的原因是用于创建表的代码优先内部逻辑。除 EF 5.0 RC 之外的所有版本都将仅与数据库一起创建表。如果数据库存在并且您没有使用能够删除数据库的初始化策略,则不会创建您的表。反过来,如果您使用删除数据库的策略,您将丢失您的成员表。
您可以创建custom database initializer 在现有数据库中创建表或自定义数据库初始化程序,它将执行 DDL 脚本以在 Seed 方法中创建成员表,或者您可以尝试EF 5.0 RC,它应该能够在现有数据库中创建表 -开箱即用。
或者,您也可以让代码先创建数据库,然后手动添加成员表,但每次您让代码先重新创建数据库时(不使用迁移时),它都会删除您的成员表,您必须再次手动添加它们.
【讨论】:
【参考方案2】:我正在为我正在开发的网站滚动我自己的会员/角色/个人资料管理员,并遇到了这个问题。这个问题我有点晚了,但是如果您仍在处理此问题,此链接应该对您有所帮助: http://imar.spaanjaars.com/563/using-entity-framework-code-first-and-aspnet-membership-together
HTH
【讨论】:
以上是关于如何让asp.net成员提供者和实体框架共享同一个数据库的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET:如何在 Web 应用程序之间共享资源(成员资格、库)