我得到的错误是“无法打开数据库”NerdlyDB“登录请求。登录失败。 用户'ComputerName \ User Name'登录失败。
这是我的连接字符串:
<add name="NerdlyDB" connectionString="Data Source=(LocalDb)\v11.0; Integrated Security=SSPI; initial catalog= NerdlyDB" providerName="System.Data.SqlClient"/>
此数据库是使用EF代码第一种方法生成的。我是这个人的新手,所以我会告诉你我做了什么,以防它出在某个地方:
我的实体类:
namespace NerdlyThings.Models
{
public class Post
{
public int ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Content { get; set; }
public DateTime Date { get; set; }
public string Tags { get; set; }
}
}
DBContext类
namespace NerdlyThings.Models
{
public class NerdlyDB : DbContext
{
public DbSet<Post> Posts { get; set; }
public DbSet<Comment> Comments { get; set; }
public DbSet<Image> Images { get; set; }
public DbSet<Quote> Quotes { get; set; }
}
}
我看到错误显然是一个身份验证问题,但我不知道在哪里首先使用代码设置它,只能通过在sql server management studio中设置db。
的 的 *编辑***
好的,所以我不是我原来做过的电脑,但是我有时间在工作中杀人,所以按照简单的指示给我另一个去here
我在MVC4互联网应用程序模板中的Visual Studio 2012 RC中做到了这一点。像梦一样工作,我只能假设我的另一台计算机上有一些奇怪的配置问题,或者有些东西搞砸了。无论如何,这就是我所做的:
类:
namespace CodeFirstBlog.Models
{
public class Blog
{
public int Id { get; set; }
public string Title { get; set; }
public string BloggerName { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime DateCreated { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public ICollection<Comment> Comments { get; set; }
}
public class Comment
{
public int Id { get; set; }
public DateTime DateCreated { get; set; }
public string Content { get; set; }
public int PostId { get; set; }
public Post Post { get; set; }
}
}
DBContext类:
namespace CodeFirstBlog.Models
{
public class BlogContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
public DbSet<Comment> Comments { get; set; }
}
}
我设置了这些,然后创建了一个像这样的控制器(只是它生成了我选择我的上下文和类):
public class BlogController : Controller
{
private BlogContext db = new BlogContext();
//
// GET: /Blog/
public ActionResult Index()
{
return View(db.Blogs.ToList());
}
//
// GET: /Blog/Details/5
public ActionResult Details(int id = 0)
{
Blog blog = db.Blogs.Find(id);
if (blog == null)
{
return HttpNotFound();
}
return View(blog);
}
//
// GET: /Blog/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Blog/Create
[HttpPost]
public ActionResult Create(Blog blog)
{
if (ModelState.IsValid)
{
db.Blogs.Add(blog);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(blog);
}
//
// GET: /Blog/Edit/5
public ActionResult Edit(int id = 0)
{
Blog blog = db.Blogs.Find(id);
if (blog == null)
{
return HttpNotFound();
}
return View(blog);
}
//
// POST: /Blog/Edit/5
[HttpPost]
public ActionResult Edit(Blog blog)
{
if (ModelState.IsValid)
{
db.Entry(blog).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(blog);
}
//
// GET: /Blog/Delete/5
public ActionResult Delete(int id = 0)
{
Blog blog = db.Blogs.Find(id);
if (blog == null)
{
return HttpNotFound();
}
return View(blog);
}
//
// POST: /Blog/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
Blog blog = db.Blogs.Find(id);
db.Blogs.Remove(blog);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
然后我只是运行应用程序,使用生成的视图创建一个新的Blog。效果很好。数据库是在我的App_Data文件夹中生成的,我可以正常访问它并查看生成的模式。所以问题解决了,也许吧?从这一点开始,我可以使用你建议的答案来调整db设置和诸如此类的东西,谢谢。
答案 0 :(得分:1)
您是否正在将DBContext
类连接到某个连接字符串?我的猜测是缺失,因此导致问题。我经常看到DBContext
类的构造函数中指定的连接字符串(参见下面的示例):
public class NerdlyDB : DbContext
{
public NerdlyDB() : base("NerdlyDB")
{
}
...
然后,您会在<connectionString>
/ name="NerdlyDB"
中找到web.config
app.config
MileageStats.Data.SqlCe
。有关使用连接字符串设置EF的详细信息,请参阅此link。
我还建议在代码中使用@Eric J.的方法。您可以在silk.codeplex.com(特别是Silk
项目)上看到他的建议(以及EF代码一般)的深入示例
单独说明,您似乎缺少实际代码第一个模型设置。查看{{1}}项目中的MileageStatsDbContext.cs
文件,查看如何执行此操作的示例。
答案 1 :(得分:0)
到目前为止,我发现的最佳方法是创建自己的IDatabaseInitializer来运行创建索引和创建用户所需的命令。
public class MyContext : DbContext
{
static private Initializer DbInitializer;
static MyContext()
{
DbInitializer = new MyContext.Initializer();
Database.SetInitializer<MyContext>(DbInitializer);
}
}
public class Initializer : IDatabaseInitializer<MyContext>
{
public void InitializeDatabase(MyContext context)
{
string ddl = "(Some SQL command to e.g. create an index or create a user)";
context.Database.ExecuteSqlCommand(ddl);
}
}