2016-11-01 45 views
0

我遵循這個https://mva.microsoft.com/en-us/training-courses/implementing-entity-framework-with-mvc-8931?l=mBKHDFC3_9204984382的教程。這是我的代碼使用EF Fluent API創建2個主鍵

namespace FluentAPI 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var context = new MusicContext()) 
     { 
      var album = new Album() { Price = 9.95m, Title = "YUhuu" }; 
      context.Albums.Add(album); 
      context.SaveChanges(); 
     } 
    } 

    public class Album 
    { 
     public int AlbumId { get; set; } 
     public string Title { get; set; } 
     public decimal Price { get; set; } 
    } 

    public class MusicContext : DbContext 
    { 
     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.HasDefaultSchema("MusicStore"); 

      modelBuilder.Entity<Album>().HasKey(t => t.AlbumId); 

      //tell EF to map string into varchar 
      modelBuilder.Entity<Album>().Property(t => t.Title).IsUnicode(false); 

      //Album id not going to be identity 
      modelBuilder.Entity<Album>() 
       .Property(t => t.AlbumId) 
       .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

      base.OnModelCreating(modelBuilder); 
     } 

     public DbSet<Album> Albums { get; set; } 
    } 
} 
} 

它假設在數據庫中創建一個表,用​​作爲主鍵。但是當我運行這個程序時,表結果並不是我所期望的。有2個主鍵:​​和Title。我只想​​作爲我的主要關鍵。難道我做錯了什麼?

+0

可以顯示錶結構(SQL)嗎? –

+1

您是連接到現有數據庫還是從代碼創建數據庫?因爲代碼看起來不錯。 – syned

+0

@syned我從代碼 – Intan

回答

0

[Key]在​​之上缺少註釋。

+0

創建數據庫這是不需要的,因爲EF代碼優先**約定**發揮作用,默認情況下使'Id'或'(實體)Id' **鍵**。 ...加上代碼中有這樣一行:'modelBuilder.Entity ().HasKey(t => t.AlbumId);''也將'AlbumId'設置爲關鍵字。 –