实体框架代码第一个MySql多个表

时间:2011-09-26 23:31:17

标签: c# mysql entity-framework ef-code-first poco

我首先使用Microsoft Entity Framework代码来管理我的数据(使用MySQL)。我已经定义了一个POCO对象,但是,当我尝试添加数据时,表示用户不存在。我查看了数据库,并创建了表User not Users。我该如何解决这个问题?这让我疯了!

谢谢!

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

我还没有将EF用于EF,但不管我认为解决方案是unbias。您需要关闭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。对于其他学习体验,您无法指定上述内容,而是明确地将对象“用户”映射到表“用户”。

其他参考文献: http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx

答案 2 :(得分:2)

您可以在类上放置一个属性,告诉表名:

[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开始就不存在了......

(还没试过MySQL ......)