Özgür Özvarış

Bir yazılımcının kırık dökük dünyası

MSSQL tablo kolon uzunluğunu değiştirmek

clock Nisan 16, 2013 10:31 by author OzgurOzvaris

Değerli arkadaşlar,

Enterprise Manager ile bir tabloyu düzenle deyip alanın uzunluğu artırmaya kalkarsanız bütün tabloyu bir temp tabloya atmak gibi uzun bir yoldan gittiğini göreceksiniz. Biraz basit bir bilgi ama bunuda kayıt altına alalım dedim.

Kaynak

Changing the size of a column in SQL Server

ALTER TABLE [dbo].[Address] 
ALTER COLUMN [Addr1] [nvarchar](80) NULL

Eğer bu işlem esnasında şöyle bir hata alırsanız

The object 'Address_e' is dependent on column 'Addr1'.
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access this column.

SCHEMABINDING özelliğinden kaynaklandığından bahsediliyor.

İyi çalışmalar.

 



c# Mapping class

clock Nisan 16, 2013 10:25 by author OzgurOzvaris

Değerli arkadaşlar,

Bazen bir klasın içeriğini başka bir klass içine aktarmak isteyebilirsini. Bu işleme mapping deniyor. Özellikle katmanlı mimaride çokça kullandığımız bir ihtiyaç. Piyasada bir çok mapping toolları mevcut bunlardan bir kaçı structeremap, automapper gibi toolar sayılabilir. Aslında bu mapping işleminin temeli çok basit bir mantıkla başlıyor. Buna bir örnek olması amacı ile güzel bir kod parçasını sizlerle paylaşacağım.

Kaynak :

http://www.buraksenyurt.com/post/Tek-Fotoluk-Ipucu-99-Tipler-Arasi-Property-Eslestirme.aspx

http://stackoverflow.com/questions/3348634/automapper-and-inheritance-how-to-map

public static class TypeExtensions
    {
        public static void MapTo<T, S>(this S source, T target)
        {
            Type sourceType = source.GetType();
            Type targetType = target.GetType();

            var sourceProperties = sourceType.GetProperties();
            var targetProperties = targetType.GetProperties();

            for (int i = 0; i < sourceProperties.Length; i++)
            {
                var currentProperty = sourceProperties[i];
                var targetProperty = targetProperties
                    .FirstOrDefault(p => p.Name == currentProperty.Name);
                if (targetProperty != null)
                    targetProperty.SetValue(target, currentProperty.GetValue(source, null), null);
            }

        }
    
    }

 

 



C# String enums

clock Nisan 4, 2013 12:09 by author OzgurOzvaris

Değerli arkadaşlar,

Bir enum değer içinde char ve integer değerler saklanabiliyor ve geri alınabiliyor. Şimdi vaktimin darlığından bunun örneklerini yazmayacağım. Burada asıl ihtiyacımız olan şey bir enum değere bağlı string değer saklamak istersek ne yapmamız gerektiği. İlginç bir yöntem buldum. Sizlerle paylaşayım dedim.

Kaynaklar

C# String enums

Typesafe Enum

Conversion Operators

Using Conversion Operators

public sealed class enmCompanyType
    {

        private readonly String name;
        private readonly string value;
        private static readonly Dictionary<string, enmCompanyType> instance = new Dictionary<string, enmCompanyType>();


        public static readonly enmCompanyType Agency = new enmCompanyType("ACT", "Agency");
       
        private enmCompanyType(string value, String name)
        {
            this.name = name;
            this.value = value;

            instance.Add(name, this);
        }

        public override String ToString()
        {
            return name;
        }

        public string Value
        {
            get
            {
                return value;
            }
        }

        public static explicit operator enmCompanyType(string str)
        {
            enmCompanyType result;
            if (instance.TryGetValue(str, out result))
                return result;
            else
                throw new InvalidCastException();
        }

    }

 

Herkese iyi çalışmalar.

 

 



WCF Custom Context

clock Nisan 2, 2013 15:52 by author OzgurOzvaris

Değerli Arkadaşlar,

Eski alışkanlıklar kolay bırakılmıyor.Smile Eğer sizde böyle düşünüyor ve wcf niz içinde eskiden olduğu gibi herhangi bir class library altında Httpcontext.Curent.Session["Parameter"] kullanmak isterseniz bu yöntem hoşunuza gidecektir. HttpContext benzeri bir custom context yapısı kuracağız ve bunu wcf'imize bağlayacağız.

Tabiki Kaynak

http://hyperthink.net/blog/a-simple-ish-approach-to-custom-context-in-wcf/ 

Öncelikle bir MyContext classı oluşturun bu classınproje içinde  her yerden görünmesi gerekiyor.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace Infrastructure
{
    public class MyContext : IExtension<OperationContext>
    {

        //The "current" custom context

        public static MyContext Current
        {

            get { return OperationContext.Current.Extensions.Find<MyContext>(); }

        }



        #region IExtension<OperationContext> Members



        public void Attach(OperationContext owner)
        {

            //no-op

        }



        public void Detach(OperationContext owner)
        {

            //no-op

        }

        #endregion



        object contextProperty1;



        //You can have lots more of these -- this is the stuff that you 

        //want to store on your custom context

        public object ContextProperty1
        {

            get { return this.contextProperty1; }

            set { this.contextProperty1 = value; }

        }

    }
}

Şimdi geri kalan kodları wcf inizi görmesi yeterli.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Description;
using System.ServiceModel.Channels;


namespace WcfServiceLib
{
    

    public class MyContextMessageInspector : IDispatchMessageInspector
    {

        public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request,
                                          IClientChannel channel,
                                          InstanceContext instanceContext)
        {

            OperationContext.Current.Extensions.Add(new MyContext());

            return request.Headers.MessageId;

        }



        public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
        {

            OperationContext.Current.Extensions.Remove(MyContext.Current);

        }

    }

    public class MyContextBehaviorAttribute : Attribute, IServiceBehavior
    {

        #region IServiceBehavior Members



        public void AddBindingParameters(ServiceDescription serviceDescription,

                                         ServiceHostBase serviceHostBase,

                                         System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints,

                                         BindingParameterCollection bindingParameters)
        {

            //no-op

        }



        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {

            foreach (ChannelDispatcher cd in serviceHostBase.ChannelDispatchers)
            {

                foreach (EndpointDispatcher ed in cd.Endpoints)
                {

                    ed.DispatchRuntime.MessageInspectors.Add(new MyContextMessageInspector());

                }

            }

        }



        public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {

            //no-op            

        }

        #endregion

    }

   }

Yukarıda bölümde MyContexti bir attribute ile wcf clasımıza uygulayabilir hale getirdik. Şimdi onu uyguluyoruz.

[ServiceContract]

    [MyContextBehavior]

    public class MySerivce
    {

        [OperationContract]

        public string DoStuff(string foo)
        {

            //Use MyContext.Current here to do something interesting...

            MyContext.Current.ContextProperty1 = "test";

        }

    }

Şimdi artık MyContext.Current.ContextProperty1 değerini projenin her yerinden alabilirsiniz.

 

Herkese iyi çalışmalar.



WCF servisinize IOC Container ekleme

clock Nisan 2, 2013 12:29 by author OzgurOzvaris

Değerli arkadaşlar,

Önce Kaynaklar

http://www.dimecasts.net/Casts/CastDetails/150

Episode150_WCF_AddingIoCSupportToYourServices.zip (374,68 kb)

 

Bildiğiniz üzere dependecy injection diye bir yazılım kavramı. Bu kavramı kolay uygulayabilmemiz için IOC Containerlar kullnılıyor. Bu IOC containerlardan biride StructerMap isimli bir IOC Container.

Hani olurda Web servisinizden kullanığınız metodu da abstract etmek isterseniz WCF servinizin içinde kulanılan metodu sürecin içine katabilmemiz için WCF bunu destekleyecek mekanizmalırı oluşturmuş. Yapmamız gereken WCF ile staracturemap arasında bir bağlantı oluşturup keyfimize bakmak.

Ör :

public class PatientEligibilityService : IPatientEligibilityService
    {

        public bool IsPatientEligibleForGoodCare(Patient patient)
        {
            var specification = ObjectFactory.GetInstance<IPatientEligibleForGoodCareSpecification>();

            return Specification.IsSatisfiedBy(patient);
        }

        
    }

Bir webservis metodunuda sürekli olarak Specification classının StaractureMap in factory metodu olan GetInstance metodu ile üretmek istemezseniz. Yani

public class PatientEligibilityService : IPatientEligibilityService
    {
        public IPatientEligibleForGoodCareSpecification Specification { get; set; }

        public PatientEligibilityService( IPatientEligibleForGoodCareSpecification specification )
        {
            Specification = specification;
        }

        public bool IsPatientEligibleForGoodCare(Patient patient)
        {
            //var specification = ObjectFactory.GetInstance<IPatientEligibleForGoodCareSpecification>();

            return Specification.IsSatisfiedBy(patient);
        }


       
    }

Bu şekilde kullanmak isterseniz verdiğim kaynakları dikkatlice inceleyin.

 

İyi çalışmalar.

 



Hakkımızda  AboneOl 

Blog Yayınımıza Hoşgeldiniz.

Month List

RecentPosts

Sign In