Thursday, November 18, 2010

How to implement transaction in WCF client

Here we see how to consume two wcf service from wcf client !

Create a WCF Service :

using System.ServiceModel;
namespace ACWCF
{ [ServiceContract]
public interface ITranService
{

[TransactionFlow(TransactionFlowOption.Allowed)]
[OperationContract]
void UpdateData();
}
}

// Implement the interface
public class TranService : ITranService
{
[OperationBehavior(TransactionScopeRequired = true)]
public void UpdateData()
{
SqlConnection objConnection = new SqlConnection("MyConnectionString");
objConnection.Open();
SqlCommand objCommand = new SqlCommand("insert into Customer(CustomerName,CustomerCode) values('sss','sss')", objConnection);
objCommand.ExecuteNonQuery();
objConnection.Close();
}

// Assuming we are aware of hosting the service on IIS .. so i am not talking about the web.config part of it .



Now lets create a client to consume multiple wcf service

// this is how wcf client can consume multiple wcf service.
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
{
try
{
//ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
//obj.UpdateData();
//ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
//obj1.UpdateData();

ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}

A great article can be seen on
http://www.c-sharpcorner.com/UploadFile/shivprasadk/436456754708092009145905PM/4364567547.aspx

another good wcf clip can be seen at:

Saturday, November 13, 2010

Entity Framework Sample

You need to install sp1 before you can start with entity framework

If you can't see the framework template, do the following step
Click on Tools => Option => Projects & Solutions ..then
Click on "User item template location" browse button and set the right path
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\
do same for project templets
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\
Now click on "ok"
then close the studio and re-open again ..now you will be able to see the entity framework template

some more guide step - by step can be seen on http://www.installationwiki.org/Installing_ADO.NET_Entity_Framework

Getting problem in Connectionstring in Entity framework ?

< add name="HRRPMSContext" providerName="System.Data.EntityClient" connectionString="metadata=res://ETG.Base.Applications.EntityFramework,Culture=neutral,PublicKeyToken=null/HRRPMSContext.csdl|res://ETG.Base.Applications.EntityFramework,Culture=neutral,PublicKeyToken=null/HRRPMSContext.ssdl|res://ETG.Base.Applications.EntityFramework,Culture=neutral,PublicKeyToken=null/HRRPMSContext.msl;provider=System.Data.SqlClient;provider connection string='Data Source=ETG1\SQLEXPRESS;;Initial Catalog=ACSampleDB;User ID=HRRPMS;Password=pass;Integrated Security=True;multipleactiveresultsets=true'"/ >

In the above string ETG.Base.Applications.EntityFramework is my assembly name ETG.Base.Applications.EntityFramework.dll

Another way of creating  to connection string for entity framework is

 internal class Util
    {
        public static string EntityFrameworkConnectionString
        {
            get
            {
                SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();
                providerCs.InitialCatalog = CryptoService2.Decrypt(ConfigurationManager.AppSettings["DatabaseName"]);
                providerCs.UserID = CryptoService2.Decrypt(ConfigurationManager.AppSettings["UserId"]);
                providerCs.Password = CryptoService2.Decrypt(ConfigurationManager.AppSettings["Password"]);
                providerCs.DataSource = ConfigurationManager.AppSettings["ServerName"]; //CryptoService2.Decrypt(ConfigurationSettings.AppSettings["ServerName"]);
                providerCs.MultipleActiveResultSets = true;
                providerCs.TrustServerCertificate = false;
               // providerCs.IntegratedSecurity = true;
                EntityConnectionStringBuilder ecsb = new EntityConnectionStringBuilder();
                ecsb.Provider = "System.Data.SqlClient";
                ecsb.ProviderConnectionString = providerCs.ToString();
                ecsb.Metadata = string.Format("res://{0}/HrModel.csdl|res://{0}/HrModel.ssdl|res://{0}/HrModel.msl", typeof(HRRPMSEntities).Assembly.FullName);
                return ecsb.ToString();
            }
        }


Fetching a collection using entity framework.
public static List< tbCandidate> GetAllCandidates()
{
List< tbCandidate > candidates = new List< tbCandidate>(); ;

using (var hrEntities = new HRRPMSContext())
{
foreach (var candidate in hrEntities.tbCandidate)
{
candidates.Add(candidate);
}
}

return candidates;

}

Adding data example :
public static void SetData()
{
tbCandidate candidate = new tbCandidate();
candidate.Name = "Arindam Chakraborty";
candidate.Phone = "11545645656";
candidate.Qualification = "B.Sc";
candidate.Street = "New Golden Nest";
Add(candidate);

}

public static void Add(tbCandidate obj)
{
using (var hrEntities = new HRRPMSContext())
{
hrEntities.AddTotbCandidate(obj);
hrEntities.SaveChanges();
}
}

Find a candidate by name from database
public static tbCandidate FindCndidateByName(string name)
{
tbCandidate candidate = null;

using (var hrEntities = new HRRPMSContext())
{
candidate = hrEntities.tbCandidate.FirstOrDefault(c => c.Name == name);
}

return candidate;

}

Update a candidate information

public static void Update(tbCandidate updatedCandidate)
{

using (var hrEntities = new HRRPMSContext())
{
tbCandidate candidate = hrEntities.tbCandidate.FirstOrDefault(c => c.CandidateID == updatedCandidate.CandidateID);
candidate = updatedCandidate;
hrEntities.tbCandidate.Context.ApplyPropertyChanges("tbCandidate", candidate);
hrEntities.tbCandidate.Context.SaveChanges();
}
}

Add Data in many tables with transaction scope
public static void AddMultipleRecord(tbInterview interview, tbRequirement requirement)
{

using (TransactionScope scope = new TransactionScope())
{
using (var hrEntities = new HRRPMSContext())
{

hrEntities.AddTotbInterview(interview);
hrEntities.AddTotbRequirement(requirement);

hrEntities.SaveChanges();
scope.Complete();
}
}
}


How to write join and where clause using lambada expression
using (var entities = new MyEntities())
{
var userProfile = from user in entities.UserProfile
join pro in entities.ProductInfo
on user.UserInfoID equals pro.UserInfoID
where pro.ProductInfoId == ProductId
select user;

profile = userProfile.FirstOrDefault();

}