2014年7月3日 星期四

在MVC5 專案之中使用WCF Data Service

 

Tool:Visual Studio 2013 Ultimate Update 2
OS:Windows 8.1
.NET Framework : 4.5.x
Entity Framework : 6.1.x版以上
ASP.NET MVC 5

 

step-by-step : 在MVC5 專案之中使用WCF Data Service

  • New Project

image

  • Empty MVC

image

  • 安裝Microsoft.OData.EntityFrameworkProvider (Entity Framework Provider for OData)

image

  • 加入ADO.NET Entity Data Model (Database First方式)

image

image

image

  • 使用Pubs資料庫

image

image

  • 按Finish
  • 加入WCF Data Service

 

image

 

image

  • 修改程式,改繼承 EntityFrameworkDataService<T>
public class WcfDataService1 : EntityFrameworkDataService<PubsEntities> { 
    public static void InitializeService( DataServiceConfiguration config ) {
      config.SetEntitySetAccessRule( "*" , EntitySetRights.All );
      config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
    }
  }
  • 開放路由

public class RouteConfig {
    public static void RegisterRoutes( RouteCollection routes ) {
      routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );

     routes.IgnoreRoute( "WcfDataService1.svc/{*pathInfo}" );

      routes.MapRoute(
          name: "Default" ,
          url: "{controller}/{action}/{id}" ,
          defaults: new { controller = "Home" , action = "Index" , id = UrlParameter.Optional }
      );
    }
  }

 

  • 測試

image

  • 看到Aton feed:

image

  • 查詢第一筆資料,ID為6380

image

  • 後續便可以使用OData URI Convention進一步查詢,如找尋 Jobs資料表,job_id大於5的資料

2014年7月1日 星期二

Entity Framework 7 懶人包

 

(以下功能在正式版出來時,可能會有修改)

 

  • 支援新平台,Windows Phone、Windows Store (太好了),以及 Cloud Optimized .NET ...
    • Windows Phone、Windows Store 先提供本機資料存取版本(local data access)
  • 支援 SQLite
  • 支援Mono( Mac and Linux)
  • 支援關聯式與非關聯式資料儲存體,例如Azure Table Storag
  • DbContext & Code First Only (呵呵呵....)
  • 支援EF6程式,不需upgrade,EF6程式或要upgrade到EF7可能需要修改一些程式碼….(嗯)
  • EF7將會是一個輕量級的擴充版本,並非所有EF6的新功能,都會出現在EF7 ,只將最常用的功能移植到EF7 ,並新增一些新功能,將目前EF6難以實作的功能,加到EF7

 

 

參考資源

Entity Framework 6 – 啟用log

 

Tool:Visual Studio 2013 Ultimate Update 2 OS:Windows 8.1
.NET Framework : 4.5.x
Entity Framework : 6.1.x版以上
ASP.NET MVC 5

 

Entity Framework提供一個簡單的機制,可以將SQL操作自動記錄起來,寫到log。更好的是,不需編譯程式碼,只要修改組態檔案就行了。

在網站組態檔案之中,加入以下interceptors設定:

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="v11.0" />
    </parameters>
  </defaultConnectionFactory>
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
  <interceptors>
    <interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger,EntityFramework">
      <parameters>
        <parameter value="c:\temp\mylog.log"/>
        <parameter value="true" type="System.Boolean"/>
      </parameters>
    </interceptor>
  </interceptors>
</entityFramework>

第二個參數表示,log資料會附加到現有檔案,不會將原有檔案內容蓋掉。

存檔之後,只要執行程式,使用到Entity Framework功能,就會產生log檔案,參考記錄的log檔案內容:

image

Entity Framework 6 - 執行SQL查詢

 

Tool:Visual Studio 2013 Ultimate Update 2 OS:Windows 8.1
.NET Framework : 4.5.x
Entity Framework : 6.0版以上
ASP.NET MVC 5

使用Entity Framework時,除了使用LINQ Expression以及擴充方法之外,還可以偷偷下SQL語法,不過你要自行小心SQL Injection問題。

若要在Entity Framework之中執行SQL,可以叫用SqlQuery方法,例如以下在MVC Controller之中使用以下SQL程式碼:

private PhotoSharingDB db = new PhotoSharingDB();
public async Task<ActionResult> Search( ) {
  var sql = "select * from photos where Title like 'B%'";
  var r = await db.Photos.SqlQuery(sql).ToListAsync( );
  return View( "Search" , r );
}

若要使用參數的話,可以將程式改為:

public async Task<ActionResult> Search( string term ) {
  var sql = "select * from photos where Title like @p0 +'%'";
  var r = await db.Photos.SqlQuery( sql , term ).ToListAsync( );
  return View( "Search" , r );
}

Entity Framework 6- 以非同步方式取回資料

Tool:Visual Studio 2013 Ultimate Update 2 OS:Windows 8.1
.NET Framework : 4.5.x
Entity Framework : 6.0版以上
ASP.NET MVC 5

Entity Framework 6提供了非同步的方式取回資料庫的資料。在過去,你可能會在ASP.NET MVC  Controller之中,使用以下程式查詢資料庫資料:

private PhotoSharingDB db = new PhotoSharingDB();

public ActionResult Index()
{
    return View("Index", db.Photos.ToList());
}

我們可以搭配非同步Async/Await Pattern,將程式改為:

public async Task<ActionResult> Search( ) {
  var r = await db.Photos.ToListAsync( );         
  return View( "Index" ,  r);
}


注意Entity Framework 要 6.0版以上版本才可以叫用.ToListAsync( )方法

總網頁瀏覽量