首先使用现有数据库进行编码

时间:2014-09-05 02:36:46

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

我是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中执行的所有操作?

3 个答案:

答案 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建议的数据注释没有提前工作。