Web.config ASP.Net MVC

Di ASP.NET MVC Secara default ada 2 buah Web.Config

/Views/Web.config

Berisi directive-directive yang menginstruksikan ke server web untuk mengabaikan file-file aspx di folder Views. Selain hal itu, file ini juga berisi konfigurasi yang diperlukan untuk membuat kompiler ASP .NET berjalan dengan sip dengan sintak template View nya

/Web.config

File ini tempat konfigurasi aplikasi

DbContext

Menggunakan DbContext dengan namespace yang berbeda dengan namespace Model, menghasilkan error berikut :

Type ‘Project.Data.Model’ could not be found. Make sure that the required schemas are loaded and that the namespaces are imported correctly. Near type name, line 1, column 74.

Masalah ini solve ketika namespace yang dipergunakan sama.

TransactionScope

Apabila terdapat lebih dari satu transaksi dijalankan , diperlukan kepastian semua transaksi berjalan sukses, apabila salah satu transaksi gagal, maka harus ada mekanisme untuk membatalkan transaksi yang telah dijalankan.
Snippet:

[HttpPost]
public ActionResult Create(User user)
{
if (ModelState.IsValid)
{
using (TransactionScope scope = new TransactionScope())
{
try
{
MembershipUser membership = Membership.CreateUser(user.Name, user.Password);
db.Users.Add(user);
db.SaveChanges();
//throw new Exception();
scope.Complete();
}
catch (MembershipCreateUserException ex)
{
string exceptionstring = ex.Message;
return View();
}
catch (EntityException ex)
{
string exceptionstring = ex.Message;
return View();
}
catch (Exception) { }
}
}
return RedirectToAction("Index");
}

Pada contoh di atas, transaksi pertama adalah insert user pada database bawaan System.WebSecurity.Membership, sedangkan transaksi kedua adalah insert user pada database aplikasi (custom). Test kode ini adalah dengan menambahkan Throw setelah transaksi pertama di eksekusi. Throw ini menyebabkan tranksaksi kedua tidak tereksekusi, sehingga otomatis scope.Complete tidak tereksekusi. Hasilnya transaksi pertama juga dibatalkan.

Concurrency Exception

Masalah Concurrency terjadi jika aplikasi kita di buka di beberapa browser, dan beberapa user berusaha mengupdate database pada field dan record yang sama secara bersama-sama pula. Seharusnya aplikasi mengantisipasi hal ini, karena menyebabkan data menjadi tidak konsisten.
Misalnya terdapat user A yang mengupdate data X pada suatu tempat, bersamaan dengan user B mengupdate data yang sama pada tempat yang berbeda secara bersama-sama. Ketika user A mengupdate data X menyadi data Y, maka user B belum mengetahui bahwa data X telah berubah menjadi data Y. Maka seharusnya dia tidak dapat mengupdate data tersebut, kecuali yang ditampilkan di layar sudah yang paling baru (data Y, bukan data X).
C# menggunakan DbUpdateConcurrencyException untuk menangkap eksepsi ini.
Snippet:

[HttpPost]
public ActionResult Edit(Product product)
{
try
{
if (ModelState.IsValid)
{
db.Entry(product).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
return RedirectToAction("Index");
}
}
catch (DbUpdateConcurrencyException ex)
{
var entry = ex.Entries.First();
var databaseValues = (Product)entry.GetDatabaseValues().ToObject();
var clientValues = (Product)entry.Entity;
if (databaseValues.Name != clientValues.Name)
{
ModelState.AddModelError("Name", "CurrentValue" + databaseValues.Name);
}
if (databaseValues.Price != clientValues.Price)
{
ModelState.AddModelError("Price", "CurrentValue" + databaseValues.Price);
}
ModelState.AddModelError(string.Empty, "Bla bla bla");
product.Timestamp = databaseValues.Timestamp;
}
catch (DataException de)
{
ModelState.AddModelError(string.Empty, "Unable to save changes");
}
ViewBag.InstructorID = new SelectList(db.Product, "ProductId", "Name", product.Id);
return View(product);
}

QuartzNet

Lingkungan :MS Visual Studio .Net 2010 (C#)

Instalasi
Instalasi dengan perintah install-package Quartz pada Nuget, install-package log4net, hal ini akan menambahkan Referensi Quartz dan log4net pada Solution.
Job
Buat sebuah folder untuk menyimpan Job, beri nama folder tersebut Job. Di dalam folder Job, buatlah sebuah Class baru, beri nama Job1 (file Job1.cs). Class Job1 harus mengimplementasi Interface IJob.

Interface Ijob memiliki satu method bernama Execute, yang bertipe void. Buat job dalam method ini, misalnya insert ke dalam database. Contoh:

Contoh:

using Quartz;
using QuartzSchedul.Models;
namespace QuartzSchedul.Job
{
public class Job1:IJob
{
public void Execute(JobExecutionContext context)
{
Tes tes1 = new Tes {  Name = "Tes1" };
DataContext dcontext = new DataContext();
dcontext.Tes.Add(tes1);
dcontext.SaveChanges();
}
}
}

Konfigurasi
Pada Web.Config, tambahkan key sebagai berikut:

<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
    <section name="quartz" type="System.Configuration.NameValuesSectionHandler, System, Version=1.0.5000.0, Culture=neutral, Public Key Token=b77a5c561934e089" />
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
  </configSections>
  <quartz>
    <add key="quartz.scheduler.instanceName" value="QuartzScheduler" />
    <add key="quartz.threadPool.threadCount" value="10" />
    <add key="quartz.threadPool.threadPolicy" value="2" />
    <add key="quartz.jobStore.misfireThreshold" value="6000" />
    <add key="quartz.jobStore.type" value="Quartz.simpl.RAMJobStore,Quartz" />
  </quartz>
  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter,CommonLogging">
        <arg key="showLogName" value="true" />
        <arg key="showDataName" value="true" />
        <arg key="level" value="DEBUG" />
        <arg key="dateFormat" value="HH:mm:ss:fff" />
      </factoryAdapter>
    </logging>
  </common>
<add key=”job1” value=”5 * * * * ?”> dalam  <AppSettings>, sehingga kurang lebih menjadi seperti ini:
<configuration>
<appSettings>
<add key="webpages:Version" value="1.0.0.0"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
<add key="job1" value="1 * * * * ?" />
</appSettings>

Pada Global.asax, tambahkan scheduler dan daftarkan Job yang telah dibuat pada scheduler.

IScheduler scheduler = null;
ISchedulerFactory factory = new StdSchedulerFactory();
scheduler = factory.GetScheduler();
JobDetail job1 = new JobDetail("job1","jobGroup",typeof(Job1));
string cronjob1 = ConfigurationManager.AppSettings["job1"];
CronTrigger trigger = new CronTrigger("trigger", "triggerGroup", "job", "jobGroup", cronjob1);
scheduler.AddJob(job1,true);
scheduler.ScheduleJob(trigger);

Entity Framework Code First

Setelah database ditambahkan ke Project, kita dapat menulis query dan mengupdate database kita. Entity Framework adalah API data Object Relational Mapping (ORM) yang fleksibel yang memungkinkan developer melakukan query dan mengupdate data dalam database dengan cara Obejct Oriented.
EF versi 4 mensupport paradigma Code First, yaitu membuat Objek Model dengan menulis Class sederhana (disebut juga POCO, plain old CLR objects) dan dapat membuat database on the fly dari Class-Class yang anda buat.
Untuk dapat mempergunakan Code First, anda harus terlebih dahulu menginstall EFCode First Library.
atau install dari Package Manager Console:

PM> Install-Package EntityFramework
You are downloading EntityFramework from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkID=211010. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'EntityFramework 4.1.10331.0'
Successfully added 'EntityFramework 4.1.10331.0' to MvcApplication2
PM>
PM>

Jika sudah terinstall, di Solution Explorer, pada projek kita, di bawah folder References akan terdapat EntityFramework

Follow

Get every new post delivered to your Inbox.