2016-02-04 56 views
1

我創建了我的所有模型,然後我添加了一個新遷移Add-Migration Initial添加遷移一個列名不止一次

添加遷移在遷移文件夾中創建了與遷移文件類似的遷移文件,但由於某種原因,它創建了一個名爲client_id的列兩次。我期待創建一個名爲client_id的列,其類型爲整數,且不可爲空。

我應該注意,client_id這一列引用Clients模型的關係。

這裏是我的模型類看起來怎麼樣

[Table("scripter_campaigns")] 
public class Campaign 
{ 
    [Key] 
    [Column(Order = 1)] 
    public int id { get; set; } 

    [Column(Order = 2)] 
    [StringLength(200)] 
    [Required] 
    [MinLength(5, ErrorMessage = "The title must be greater than 5 characters in length"), 
    MaxLength(200)] 
    public string name { get; set; } 

    [Column(Order = 3)] 
    [StringLength(200)] 
    public string layout { get; set; } 

    [Column(Order = 4)] 
    [StringLength(200)] 
    public string call_list_server_name { get; set; } 

    [Column(Order = 5)] 
    [StringLength(200)] 
    public string call_list_table_name { get; set; } 

    [StringLength(200)] 
    public string status { get; set; } 


    public string intro_url { get; set; } 
    public string use_transfer { get; set; } 
    public string route_callback_to { get; set; } 
    public string call_list_database_name { get; set; } 
    public int client_id { get; set; } 

    public DateTime? created_at { get; set; } 
    public DateTime? modified_at { get; set; } 

    public virtual Client Client { get; set; } 
    //Initilize the default value 

    public Campaign() 
    { 
     status = "Active"; 
     use_transfer = "No"; 
     route_callback_to = "Self"; 
    } 

} 

,但它產生的代碼在遷移腳本上()方法

CreateTable(
     "dbo.scripter_campaigns", 
     c => new 
      { 
       id = c.Int(nullable: false, identity: true), 
       name = c.String(nullable: false, maxLength: 200), 
       layout = c.String(maxLength: 200), 
       call_list_server_name = c.String(maxLength: 200), 
       call_list_table_name = c.String(maxLength: 200), 
       status = c.String(maxLength: 200), 
       intro_url = c.String(), 
       use_transfer = c.String(), 
       route_callback_to = c.String(), 
       call_list_database_name = c.String(), 
       client_id = c.Int(nullable: false), 
       created_at = c.DateTime(), 
       modified_at = c.DateTime(), 
       Client_id = c.Int(), 
      }) 
     .PrimaryKey(t => t.id) 
     .ForeignKey("dbo.clients", t => t.Client_id) 
     .Index(t => t.Client_id); 

我不明白的地方Client_id = c.Int()是來自但是當我嘗試更新數據庫時,它引起了我的問題

這裏是錯誤

每個表中的列名必須是唯一的。 表'scripter_campaigns'中的列名'Client_id'被多次指定。

此外,數據庫中的外鍵是否需要我能夠在我的對象之間建立關係?

回答

5

Client_id = c.Int()正在創建因爲public virtual Client Client { get; set; }

這是因爲你需要做以下

[ForeignKey("Client")] 
public int client_id { get; set; }  

時,你有你的實體類

public virtual Client Client { get; set; } 

這樣[Table("scripter_campaigns")]以下將知道client_id來自哪裏。

更新:[ForeignKey("Client")]被指示public int client_id { get; set; }public virtual Client Client { get; set; }對象持有的價值。給出scripter_campaigns對象與Client對象有關。

+0

可能是我不理解關鍵字虛擬做什麼。 [ForeignKey(「Client」)]究竟做了什麼? –

+0

@MikeA據我的理解,虛擬允許延遲加載。 '[ForeignKey(「Client」)]'說'public int client_id {get;組; }'將持有來自'公共虛擬客戶端客戶端{get;組; }'對象 – Komengem

+0

有沒有辦法不使用外鍵?當您調用公共虛擬客戶端客戶端{get;}時,外鍵會增加一個開銷,我想從 –