Как заставить поставщика членства sql и инфраструктуру сущностей работать, используя мою базу данных? - PullRequest
3 голосов
/ 06 июля 2011

У меня есть проект .NET MVC 3, в котором я использую SQL-провайдер членства и инфраструктуру сущностей.

Я создал новую базу данных на своем SQL-сервере и создал все объекты для провайдера членства, используя aspnet_regsql.exe, I 'Я изменил мою строку подключения, и она отлично работает.

Теперь я хочу использовать структуру сущностей для взаимодействия с БД.Я использую Code-First, поэтому я создал простой класс сущностей и могу сохранять данные в БД и извлекать их.

Проблема в том, что место, где структура сущностей хранит свои данные, является загадкой.Я не могу найти ни одной базы данных в своем проекте, и в моей базе данных 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" 
 />

Ответы [ 2 ]

2 голосов
/ 27 мая 2012

Я только что потратил 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.

Чтобы избежать дублирования строк соединения, я передаю имя connectionString конструктору DbContext в моем конструкторе производного класса DataContext:

namespace Rem.Models
{
    public class DataEntities : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DbSet<City> Cities { get; set; }
        public DataEntities():base(@"dbcs") { ; } <----------
    }
}    
2 голосов
/ 07 июля 2011

http://www.codeproject.com/KB/web-security/EFMembershipProvider.aspx это хороший пример, который реализует обычное членство провайдера со структурой объекта. И сначала прочтите это Можно ли использовать Entity Framework с членством в ASP.NET?

...