自定义表名ASP MVC 4

时间:2013-06-24 17:29:03

标签: asp.net-mvc-4

我之前在我的数据库中创建了一些表,我想要映射到几个模型类:

"SISTEMA.Voyages" => public class Voyage
"SISTEMA.Puerto"  => public class Port

我理解在带有Entity框架的ASP.MVC 4中,这可以通过两种方式完成。但是对于他们两个我都遇到了我不知道如何解决的错误。

Voyage.cs中的第一个:

[Table("SISTEMA.Voyages")]
public class Voyage

或Context.cs中的第二个:

public class ApplicationEntities : DbContext
{
  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Voyage>().ToTable("SISTEMA.Voyages");
  }
}

对于第一个版本,当我之前认为这是自动的时候我得到了这个错误:

The type or namespace name 'Table' could not be found (are you using directive or an assembly reference?)
The type or namespace name 'TableAttribute' could not be found (are you using directive or an assembly reference?)

在第二个我得到这个错误,我没想到,因为我认为这是一个配置问题,让我真的很困惑:

The model backing the 'ApplicationEntities' context has changed since the database was created. Consider using Code First Migrations to update the Database.

这段历史记录在哪里?

为了记录,我习惯通过键入以下来处理Rails中的这类问题:

class Voyage
    self.table_name = "SISTEMA.Voyages"
end

我对C#/ ASP.NET不太熟悉。只是发布我正在寻找下一个小时的内容,除非有人告诉我我第一次出错了。

2 个答案:

答案 0 :(得分:1)

对于第一种方法,您缺少Table属性的using指令,将其添加到您的类中:

using System.ComponentModel.DataAnnotations;

对于第二种方式,我猜你的模型中有些东西已经改变,现在它建议使用Code First来更新数据库。当您运行应用程序并首先访问数据库时,它会验证您的模型是否与模式匹配 - 如果不是,它可以为您提供此错误。

我建议查看其中的一些链接,以获取EF / Code First / Migrations入门的帮助 - 它们非常方便

EF + Code First
Handling Many to Many with Payload
How to work with Migrations
MSDN EF Site

答案 1 :(得分:0)

请添加:

使用System.ComponentModel.DataAnnotations.Schema;