【问题标题】:Using Entity framework with SQL Server 2012 (local *.mdf database)将实体框架与 SQL Server 2012(本地 *.mdf 数据库)一起使用
【发布时间】:2013-07-29 20:37:17
【问题描述】:

我正在尝试在 MVC 项目中创建数据库。代码优先方法。我写了我的模型和一个DbContext 数据库。我无法连接到数据库。我怀疑问题出在我的连接字符串中,但我不确定。我想要的数据库将包含两个表,定义如下:

public class EmployeeRequest
{
    [Key]
    public int EmployeeRequestId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string UserName { get; set; }
    public int ExtNumber { get; set; }
    public bool isProcessed { get; set; }
    public virtual ICollection<ChangeOrder> ChangeOrders { get; set; }
}

public class ChangeOrder
{
    [Key]
    public int ChangeOrderId { get; set; }
    public short Operation { get; set; } //0 - Add, 1- delete
    public int TargetExt { get; set; }
    public short Status { get; set; } //0- Pending, 1- Approved, 2- Denied
    public DateTime DtRequested { get; set; }
    public DateTime DtProcessed { get; set; }
    public DateTime DtChangesApplied { get; set; }
    public int EmployeeRequestID { get; set; }
    public virtual EmployeeRequest Request { get; set; }
 }

DbContext 类是:

public class RequestsContext : DbContext
{
    public DbSet<EmployeeRequest> EmployeeRequests { get; set; }
    public DbSet<ChangeOrder> ChangeOrders { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

连接字符串:

<add name="RequestsContext" 
     providerName="System.Data.SqlClient" 
     connectionString="Data Source=(LocalDb);Database=Requests.mdf;Trusted_Connection=True"/>

我收到的错误是无法与主机建立连接。

我不确定为什么会这样。有任何想法吗?

【问题讨论】:

  • 这听起来很疯狂,尝试将您的数据源更改为 (localdb)\v11.0 而不仅仅是 (localdb)
  • 好的,这些参数已经修复了一些问题,但现在我收到一条错误消息“无法将文件路径\to\App_Data\Requests.mdf 作为数据库'Requests.mdf”附加
  • 这很有趣。尝试将数据库设置从Requests.mdf 更改为Requests,看看是否有什么作用。
  • 使用这个connectionString="Data Source=(localdb)\v11.0;Database=Requests.mdf" 会弹出一个凭证表单,服务器字段设置为(localdb)\v11.0,数据库设置为 Requests.mdf,它要求我使用 Windows 身份验证或 SQL Server 身份验证。我都试过了,但都没有工作。如果我使用 Requests 而不是 Requests.mdf,什么都不会改变

标签: c# sql-server asp.net-mvc entity-framework


【解决方案1】:

将连接字符串提供给 DbContext 基础。

public class RequestsContext : DbContext
{
    public DbSet<EmployeeRequest> EmployeeRequests { get; set; }
    public DbSet<ChangeOrder> ChangeOrders { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }

    public RequestsContext ()
    : base("RequestsContext")
    {}

}

【讨论】:

  • 这使它不再抱怨凭据,但 App_data 中仍然没有 *.mdf 文件。我需要做什么来生成它。我已经为模型生成了两个控制器,这次一切正常
  • 当您使用 .mdf 时,连接字符串是错误的。删除 .mdf 或使用 AttachDbFilename 属性。检查数据库文件的连接字符串:connectionstrings.com/sql-server-2012
  • 一旦我处理了我刚刚发现的路由问题,我就试试吧!!
  • 是的,我不确定是什么解决了它,但当我这样做时它起作用了stackoverflow.com/questions/11278114/…。查看得票最多的解决方案。您还需要从 IIS 管理工具中启用 NETWORK SERVICES
  • 很高兴它可以工作,但是您使用的是什么连接字符串?没有或有 .mdf?
【解决方案2】:

请检查应用程序是否有权访问 .mdf 文件位置。如果您的应用程序位于“myDocuments”等类型的文件夹中,则默认情况下应用程序可能无法访问它。

【讨论】:

  • 我仍然没有 *.mdf 文件,据我了解,我相信它应该在一切正常时为我生成该文件
猜你喜欢
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多