我是Entity Framework和MVC的新手。我可以在现有SQL Server数据库上使用实体数据模型向导(EDMW)并自动创建必要的类(上下文,模型等)。然后将模型(db.Employees.tolist())传递给控制器的视图。一切正常,我可以从company.employees表中看到浏览器上所有员工的列表。
但是,我想在没有EDMW或其他工具的帮助下自己编写代码,以更好地理解实体/ MVC /数据库交互。所以我编写了以下代码,但似乎无法在浏览器上显示该表。我知道我错过了什么。
SQL SERVER: Schema.tablename(Acme.Employees)
public class AcmeContext : DbContext
{
public virtual DbSet<Employee> Employees { get; set; }
}
public class Employee
{
public int customerid {get; set;}
public string name {get;set;}
public string state {get;set;}
}
public ActionResult list()
{
var db = new AcmeContext();
return view(db.Employees.tolist());
}
<connectionStrings>
<add
name="AcmeContext"
connectionString="data source=localhost;initial catalog=Acme;integrated security=True;"
providerName="System.Data.SqlClient" />
</connectionStrings>
还需要什么?
此外,当数据库已存在时,如何在现实世界中完成?开发人员是使用EDM向导还是手动编写向导在Visual Studio或其他IDE中执行的所有操作?
答案 0 :(得分:0)
默认情况下,首先使用Entity Framework代码时,架构为dbo
您可以使用流畅的API或数据转换
Fluent API:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Employee>().ToTable("Employees", "Acme");
}
数据分析
[Table("Employees", Schema = "Acme")]
public class Employee
{
...
}
答案 1 :(得分:0)
您没有调用连接字符串的构造
public class AcmeContext:DbContext {
public AcmeContext():base(nameOrConnectionString:&#34; AcmeContext&#34;){}
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); }
public virtual DbSet Employees {get;组; } }
你的问题已在这里得到解答。请参阅此主题 Code-first vs Model/Database-first
答案 2 :(得分:0)
我解决了我的问题。
EF创建了一个表dbo.employees,而不是使用acme.employees。一直以来都在查看dbo架构中的employee表。当然,该表中没有数据,因此空白网页也没有。我添加了一些数据,现在可以在页面上看到它。
我还不知道的是Aiska Hendra建议的数据注释没有提前工作。