如何使用我的数据库使Sql Membership Provider和Entity Framework正常工作?

3

我有一个.NET MVC 3项目,其中使用了SQL会员提供程序和实体框架。

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

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

问题是实体框架存储数据的位置是个谜。我找不到任何数据库在我的项目中,也没有新表出现在我的SQL数据库中。

如果我向web.config添加第二个连接字符串(第一个用于会员提供程序),我的实体框架就停止工作了(我认为它应该在我的DB中创建新表),但它没有这样做。

我的实体类看起来像:

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

我遇到了一个异常:无效的对象名称 '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" 
 />
2个回答

2

我刚刚花了2个小时来解决这个问题,最终我解决了。

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

反过来就不起作用 :(

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

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实用程序。

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

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

2

非常感谢您的回复。说实话,我并不想自定义会员提供程序,我只想让它自己工作,并使用实体框架持久化我的数据。但是我无法让实体框架看到我的数据库:( - Burjua
然后使用数据库优先,使用成员资格数据库创建您的edmx文件。然后,您将通过EF和成员资格提供程序访问DB。 - Jayantha Lal Sirisena
好的,现在我使用模型优先方法,我生成了一个简单的模型并查看表已经在我的数据库中创建了,这听起来很傻,但现在我找不到如何使用我的模型,我该如何添加新条目? - Burjua
只需右键单击edmx并添加新实体。这里有一个很好的教程。http://blog.garypretty.co.uk/index.php/2009/05/20/tutorial-entity-framework-v20-model-first-using-visual-studio-2010-and-net-40/ - Jayantha Lal Sirisena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接