2011-09-26 64 views
5

我正在使用Microsoft Entity Framework和代碼首先管理我的數據(使用MySQL)。我已經定義了一個POCO對象,但是,當我嘗試添加數據時,它表示用戶不存在。我查看了數據庫,並創建了表User not Users。我該如何補救?這讓我瘋狂!實體框架代碼優先MySql多表化表

謝謝!

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

您使用什麼連接器和版本?這似乎進來的水平..可能是錯誤的雖然 – gordatron

+0

嘿mysql連接器淨6.3.7 –

+0

此外,如果我添加上面的分類作品,但id不是必須這樣做[表(「用戶」)] –

回答

3

我還沒有使用過MySQL的EF,但不管我認爲解決方案是否是unbias。您需要關閉多表格慣例。

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

+0

謝謝!因爲明確的解釋和鏈接,所以要把它給你。再次感謝 –

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嘗試過...)

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