实体框架代码首先MySql复数表

本文关键字:MySql 框架 代码 实体 | 更新日期: 2023-09-27 18:09:38

我首先使用微软实体框架代码来管理我的数据(与MySQL)。我已经定义了一个POCO对象,但是,当我试图添加数据时,它说表Users不存在。我在DB中查看,它创建了表用户而不是用户。我该如何补救呢?它快把我逼疯了!

谢谢!

  public class User
 {
    [Key,Required]
    public int UserId { get; set; }
    [StringLength(20), Required]
    public string UserName { get; set; }
    [StringLength(30), Required]
    public string Password { get; set; }
    [StringLength(100), Required]
    public string EmailAddress { get; set; }
    [Required]
    public DateTime CreateDate { get; set; }
    [Required]
    public bool IsActive { get; set; }
}

实体框架代码首先MySql复数表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace YourNamespace
{
    public class DataContext : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
        {
            dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
        public DbSet<User> User { get; set; }
    }
}

我还没有使用MySQL与EF,但无论如何,我认为解决方案是公正的。您需要关闭Pluralize Table Convention

using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions.Edm.Db;
public class MyDbContext: DbContext
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {    
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

现在EF将在表名中查找对象名的字面量。

在继续学习实体框架下的http://msdn.microsoft.com/en-us/data/aa937723上有一些很棒的视频教程。为了获得额外的学习经验,您可以不指定上述内容,而是显式地将对象'user'映射到表'user'。

额外的引用:http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx

您可以在类上添加一个属性,告诉表的名称:

[Table("Users")]
public class User
{
    //...
}

…或者你可以使用流畅的API。要做到这一点,你需要覆盖DbContext类中的OnModelCreating方法。

public class MyDbContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().Map(t => t.ToTable("Users"));
    }
}

在EF的未来版本中,我们已经被承诺能够编写我们自己的约定。在4.1版本中还没有…