2011-10-07 188 views
1

我在设计我的应用程序时一直在尝试模型优先方法。我们通常喜欢在较大的数据库中为我们的表添加一个前缀,以便查找内容更加容易。例如:将EF 4.1代码优先模型映射到数据库表

  • SC_ =购物车表
  • wb_ =水的计费表
  • ea_ =就业申请表

类我的设置是这样至今。

public class EFDbContext : DbContext 
{ 
    public DbSet<Transaction> Transactions { get; set; } 
    public DbSet<TransactionItem> TransactionItems { get; set; } 
    public DbSet<Response> Response { get; set; } 
} 

Web.config文件(当前设置为本地数据库测试):

<add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=database" providerName="System.Data.SqlClient"/> 

什么我需要改变,以使交易对象被链接到sc_Transactions表?我没有看到我的搜索,澄清了这一点。

作为第二个问题,我必须手动创建我的表吗?

回答

3

您可以在EFDbContext类覆盖从DbContextOnModelCreating方法:

public class EFDbContext : DbContext 
{ 
    public DbSet<Transaction> Transactions { get; set; } 
    public DbSet<TransactionItem> TransactionItems { get; set; } 
    public DbSet<Response> Response { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Transaction>().MapSingleType().ToTable("someTableNameHere"); 
    } 
} 

this后获取更多信息。

+0

我不得不使用'modelBuilder.Entity ().ToTable( “sc_Transaction”);'而不是作为记录[这里](http://forums.asp.net/t/1651092.aspx)。 –

1

您可以使用System.ComponentModel.DataAnnotations像这样:

[Table("tblUser")] 
public class User 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

或用EF 4您可以覆盖OnModelCreating方法来映射你的表,这是相当强大的东西,你可以映射,并立即调整了很多东西。

public class MyContext: DbContext 
{ 
    DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().MapSingleType().ToTable("tblUser"); 
    } 
} 

欲了解更多信息,请参阅:

+0

我也喜欢这种方法。看起来好像你可以在每个你想重命名的字段上使用'[Column(“name”)]'。 –