【问题标题】:How to make sql membership provider and entity framework work using my database?如何使用我的数据库使 sql 成员资格提供程序和实体框架工作?
【发布时间】:2011-09-29 20:46:37
【问题描述】:

我有 .NET MVC 3 项目,我在其中使用 sql 成员资格提供程序和实体框架。

我已经在我的 SQL 服务器上创建了新数据库,并使用 aspnet_regsql.exe 为会员提供者创建了所有对象,我已经更改了我的连接字符串并且它工作正常。

现在我想使用实体框架进行数据库交互。我使用的是 Code-First,所以我创建了简单的实体类,我可以将数据保存到 db 并检索它。

问题是实体框架保存数据的地方是个谜。我在我的项目中找不到任何数据库,并且我的 SQL 数据库中没有新表。

如果我将第二个连接字符串添加到 web.config(第一个用于成员资格提供者),我的实体框架将停止工作(我认为它应该在我的数据库中创建新表)但它没有这样做。

我的实体类看起来像:

public class MyEntities : DbContext {
    public DbSet<Business> Businesses { get; set; }
}

我得到了一个例外Invalid object name 'dbo.Businesses'

任何帮助将不胜感激。

我的连接字符串如下所示:

<add name="ApplicationServices"
   connectionString="Data Source=.;  
                     Initial Catalog=MyDbName;  
                     Persist Security Info=True;  
                     User ID=sa;  
                     Password=mypassword"
   providerName="System.Data.SqlClient"
/>
<add name="MyEntities"
     connectionString="data source=.;
                      Initial Catalog=MyDbName;
                      Persist Security Info=True;
                      User ID=sa;
                      Password=mypassword"
     providerName="System.Data.SqlClient" 
 />

【问题讨论】:

    标签: .net asp.net-mvc entity-framework asp.net-membership connection-string


    【解决方案1】:

    http://www.codeproject.com/KB/web-security/EFMembershipProvider.aspx 这是一个很好的例子,它用实体框架实现了客户会员提供者。并首先阅读 Can I use Entity Framework with ASP.NET Membership?

    【讨论】:

    • 非常感谢您的回复。说实话我不想自定义会员提供者,我只想让它自己工作并使用实体框架保存我的数据。我无法制作实体框架来管理我的数据库:(
    • 然后首先使用数据库并使用会员数据库创建您的 edmx 文件。然后,您将可以通过 EF 和 Membership 提供程序访问 DB。
    • 好的,现在我使用模型优先的方法,我生成了简单的模型并看到表是在我的数据库中创建的,这听起来很傻但现在我找不到如何使用我的模型,我该如何添加那里没有入口?
    • 只需点击 edmx 并添加新实体。这是一个很好的教程。blog.garypretty.co.uk/index.php/2009/05/20/…
    【解决方案2】:

    我花了2个小时试图解决这个问题,我终于明白了)

    只需让 EF 先创建您的数据库(使用 CodeFirst 方法),然后使用 aspnet_regsql.exe 将成员表添加到数据库。

    反之则不行:(

    我已将 EF DbContext 添加到主页控制器,以便 EF 在站点首次启动时创建数据库。

    namespace Rem.Controllers
    {
        public class HomeController : Controller
        {
            DataEntities db = new DataEntities(); <--------------
    
            public ActionResult Index()
            {
                ViewBag.Message = "Домашняя страница";
    
                City c = db.Cities.Find(5); <--------------------
    
                return View();
            }
    
            public ActionResult About()
            {
                ViewBag.Message = "Описание сайта";
    
                return View();
            }
    
            public ActionResult Contact()
            {
                ViewBag.Message = "Контактные данные";
    
                return View();
            }
        }
    }
    

    之后我只运行了 aspnet 实用程序。

    为了避免连接字符串的重复,我在我的 DataContext 派生类构造函数中将 connectionString 名称传递给 DbContext 构造函数:

    namespace Rem.Models
    {
        public class DataEntities : DbContext
        {
            public DbSet<User> Users { get; set; }
            public DbSet<City> Cities { get; set; }
            public DataEntities():base(@"dbcs") { ; } <----------
        }
    }    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 2010-10-02
      • 2012-08-24
      相关资源
      最近更新 更多