2015年10月30日 星期五

[Visual Studio] Alive - Debug at design-time

 #Alive   #Visual Studio 2015   #Unit Test   #DEBUG 


91大極力推薦的Visual Studio 套件: Alive
可以即時的在Design time看到各變數的值和執行某邏輯的結果;
不過只限於在Test methodStatic function

目前有三十天的試用版囉!!
另外也推薦91大的相關


開始使用


實際使用上, 類似CodeLens 只有當游標移到某個Method的時候,如下圖的圖示就會自動顯示。

 

點選後,如果是可以支援的函式,其圖示會變成打勾;(如果不支援,就會呈現驚嘆號)
就可以按下右上方的啟動按鈕,Alive的即時顯示變數內容就跑出來囉!!

 
 


帶入參數

如果有傳入的參數,則可在啟動時,輸入帶入的值:



(傳說中的迴圈拖曳Bar出現了!)



支援自訂模型

我自訂了一個MyModel,在使用上也沒有任何問題!!

 



Summary


目前使用的心得是 在我身上比較可以使用的場景是在單元測試,
我在開發上比較少靜態函式,另外雖然可以在函式輸入參數,但是如果輸入的內容不能共用的話(?這一點我就不確定了), 那就還是乖乖寫單元測試囉!!

當然這是一個很令人驚豔的套件,期望Alive開發團隊有越來越棒的Idea加入!















[TFS] Trouble shooting - 在憑證存放區中找不到資訊清單簽署憑證

 ALM   Team Foundation Server  


背景

今天早上收到的TFS Server自動建置的錯誤訊息:

C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets (2718): 在憑證存放區中找不到資訊清單簽署憑證。


英文訊息應為:

Unable to find manifest signing certificate in the certificate store.


解決方式



開啟方案的應用程式,查看是否有打開「簽署ClickOnce 資訊清單」, 將其反勾選,存檔後再Check-in, 即可正常執行Team Build




以下是其他連結,說明如何在Build Server放上憑證:







2015年10月22日 星期四

[Entity Framework 6] Code Frist (4) - Migration commands in DB-First database

.NET   Entity Framework   Code First   Database Migration  


背景


今天遇到的課題是在DB-First的資料庫中, 如果新程式是採用Code-First且必須和現有的資料表產生關連 (Foreign Key) 是否也可以正常的以Migration的指令更新資料庫? 答案是可以的, 不過有一些小眉角要稍微調整一下。


環境


l   Visual Studio 2015 Ent.
l   Entity Framework 6.1.3



Update database with Migration command





原始已完成的Code-First專案如下。



加入需要產生關聯之現有表格的POCO

已存在資料庫的表格,當然就不要浪費時間再實作它的POCO,直接以實體資料模型建立它。






預設也會產生一個繼承DbContext的類別,若先前已經實作DbContext,可直接刪除它。  
此範例是加入一個現有的資料表: Employees


為了維持代碼的一致性,我手動更新類別名稱;


Add the relations between POCOs

接下來就視需要加上Relation的代碼:

l   Employee

[Table("Employees")]
    public partial class Employee
    {
        [Key]
        [Column(Order = 0)]
        [StringLength(50)]
        public string Id { get; set; }

        [Column(Order = 1)]
        [StringLength(50)]
        public string Name { get; set; }

        /// <summary>
        /// 一對多關係
        /// </summary>
        public virtual ICollection<Book> Books { get; set; }
    }


l   Book

[Table("Books")]
public class Book
{
        [Key]
        [Column(Order = 1)]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Int32 BookId { get; set; }

        [Column(Order = 2, TypeName = "NVARCHAR")]
        [MaxLength(50)]
        public String Title { get; set; }

        [Column(Order = 3, TypeName = "NVARCHAR")]
        [MaxLength(50)]
        public String EmployeeId { get; set; }

        //Foreign Key
        [ForeignKey("EmployeeId")]
        public virtual Employee Employee { get; set; }
}


l   DbContext

public class MyDbContext : System.Data.Entity.DbContext
{
        public MyDbContext()
            : base("name=MyDbContext"//指定對應的Connection String名稱
        {
        }


        public DbSet<Book> Books { get; set; }
        public DbSet<Employee> Employees { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            try
            {
                ///Employee 一對多 Book
                modelBuilder.Entity<Employee>().HasMany(m => m.Books).WithRequired(m => m.Employee);
            }
            catch (Exception ex) { }
        }
}



Migration

接下來開始執行更動資料庫的動作,先 Enable-Migrations 後,建立初始的Migration



執行Update-Database指令後,會出現以下錯誤訊息並終止更新資料庫:

資料庫中已經有一個名為 'Employees' 的物件。


Migration : Trouble shooting

解決方式:

開啟\Migrations\[日期時間]_InitialCreate.cs
將和Employees相關的程式碼移除;


重新執行Update-Database指令,成功更新資料庫。




查看一下資料庫,已經Create表格Books,並且有加上Foreign Key了。