将 EF 4.1 代码优先模型映射到数据库表

发布于 2024-12-08 11:41:20 字数 757 浏览 0 评论 0原文

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

  • 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"/>

我需要更改什么才能将 Transaction 对象链接到 sc_Transactions 表?我在搜索中没有看到可以澄清这一点的内容。

第二个问题,我是否必须手动创建表?

I have been trying the model-first method when designing my application. We usually like to add a prefix to our tables in larger databases so it is easier to find stuff. For example:

  • sc_ = Shopping cart tables
  • wb_ = Water billing tables
  • ea_ = Employment Application tables

The class I have setup looks like this so far.

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

Web.config (set currently for local database testing):

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

What do I need to change so that the Transaction object gets linked to the sc_Transactions table? I haven't seen in my searching that clarifies this.

As a second question, do I have to manually create my tables?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷迭香的记忆 2024-12-15 11:41:20

您可以在 EFDbContext 类中重写 DbContext 中的 OnModelCreating 方法:

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");
    }
}

请参阅这篇文章了解更多信息。

You can override the OnModelCreating method from DbContext in your EFDbContext class:

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");
    }
}

See this post for more info.

北座城市 2024-12-15 11:41:20

您可以像这样使用 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");
    }
}

有关详细信息,请参阅:

You can use System.ComponentModel.DataAnnotations like so:

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

Or with EF 4 you can override the OnModelCreating method to map your tables, which is quite powerful thing as you can map and adjust many things at once.

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

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

For more info see:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文