আমার ক্লাসগুলির জন্য একটি সাধারণ ডাটাবেস সংযোগটি কোথায় রাখবেন


11

আমার বেশ কয়েকটি ক্লাস (সংগ্রহশালা) রয়েছে যা ডাটাবেসে / থেকে কিছু বস্তু সংরক্ষণ / পুনরুদ্ধার করার কাজ করে; তাদের সকলের একটি ডাটাবেসের সাথে সংযোগ স্থাপন করা দরকার।

আমি ভেবেছি প্রতিটি ক্লাসে ConnectionStringএবং তাদের নতুন সংজ্ঞা না এড়াতে SqlConnection, তাদের সাথে একটি মুক্ত সংযোগ পাস করে। তারপরে / সংযোগটি সংজ্ঞায়িত করার এবং ক্লাসে পাস করার জন্য কোথায় / কখন সেরা স্থান / সময়?

এই সাধারণ সংস্থানটিতে অ্যাক্সেসের জন্য আরও ভাল পন্থা / নিদর্শন রয়েছে?

উত্তর:


10

প্রতিটি ক্লাসে একটি মুক্ত সংযোগ পাস করা সম্ভবত সেরা ধারণা নয়। ডাটাবেস সংযোগ তৈরি করার একটি পঠন নিন - এটি একবার বা প্রতিটি প্রশ্নের জন্য?

এটি আপনার সংগ্রহস্থলে ওপেন সংযোগটি পাস করার পরিবর্তে চালাতে চান এমন প্রতিটি ক্যোয়ারী অনুসারে সংযোগটি খোলার এবং বন্ধ করার পরামর্শ দেয়।

আপনার সংযোগগুলি পরিচালনা করতে আপনাকে সহায়তা করার জন্য আপনি এরকম কিছু চেষ্টা করতে পারেন।

public class Repository
{
    private readonly string _connectionString;

    public Repository()
    {
        _connectionString = ConfigurationManager.ConnectionStrings["connString"].ConnectionString
    }

    protected SqlConnection GetConnection()
    {
         return new SqlConnection(_connectionString);
    }


}

public sealed class UserRespository : Repository
{

    public User GetUsers()
    {
        using (var connection = GetConnection())
        {
            using (var commnad = new SqlCommand("SqlQuery", connection))
            {
                //Execute Query
                //Return results
            }
        }
    }
}

5

একটি মুক্ত সংযোগ থাকা এবং এটি ক্লাসগুলির মধ্যে পাস করা সাধারণত একটি খারাপ ধারণা। অবশ্যই, সংযোগ খোলার বিষয়টি বেশ কার্যকারিতা হিট, তবে ইতিমধ্যে খোলা সংযোগগুলি পুনরায় ব্যবহার করে কানেকশন পুল দ্বারা এটি ইতিমধ্যে যত্ন নেওয়া হয়েছে। যদিও একটি মন্তব্য: সর্বদা কল করার জন্য যতক্ষণ সম্ভব অপেক্ষা করুন connection.Open(), বিশেষত মাল্টিথ্রেডেড কোড থেকে এটি আপনার পদ্ধতির সাথে সংযোগটি বরাদ্দ করবে (যা সম্ভবত ডেটাবেজে মুক্ত সংযোগের প্রয়োজনীয় পরিমাণ বাড়িয়ে তুলবে)।

আপনার ক্লাসগুলি যথাসম্ভব জেনেরিক করে তুলতে, আমি আইডিবি সংযোগের সাথে কোনও পদ্ধতির সংস্পর্শে বেস ক্লাস করার পরামর্শ দিচ্ছি এবং আপনার সংগ্রহস্থলগুলিতে আরও জেনেরিক বাস্তবায়ন হবে।

internal abstract class Repository
{
    private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString;

    protected IDbConnection GetConnection()
    {
        return new SqlConnection(ConnectionString);
    }
}

public class MyRepository : Repository
{
    public IEnumerable<object> Get()
    {
        using (var connection = GetConnection())
        {
            connection.Open();

            ...
        }
    } 
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.