[পোষ্টগ্রিসকিউএলএর জন্য নতুন সমাধান] আরে, আমি জানি এটি বেশ পুরানো পোস্ট, তবে আমি সম্প্রতি একই ধরণের সমস্যায় পড়েছি, তবে আমরা পোস্টগ্র্যাসকিএল ব্যবহার করছিলাম were আমি কার্যকর বালকিনেট ব্যবহার করতে চেয়েছিলাম, যা খুব কঠিন হয়ে উঠল। এই ডিবিতে এটি করার জন্য আমি কোনও উপযুক্ত নিখরচায় গ্রন্থাগার পাইনি। আমি কেবল এই
সহায়কটি পেয়েছি:
https://bytefish.de/blog/postgresql_bulk_insert/ যা নুগেটেও রয়েছে। আমি একটি ছোট ম্যাপার লিখেছি, যা সত্তা ফ্রেমওয়ার্ককে অটো ম্যাপ করে দেয়:
public static PostgreSQLCopyHelper<T> CreateHelper<T>(string schemaName, string tableName)
{
var helper = new PostgreSQLCopyHelper<T>("dbo", "\"" + tableName + "\"");
var properties = typeof(T).GetProperties();
foreach(var prop in properties)
{
var type = prop.PropertyType;
if (Attribute.IsDefined(prop, typeof(KeyAttribute)) || Attribute.IsDefined(prop, typeof(ForeignKeyAttribute)))
continue;
switch (type)
{
case Type intType when intType == typeof(int) || intType == typeof(int?):
{
helper = helper.MapInteger("\"" + prop.Name + "\"", x => (int?)typeof(T).GetProperty(prop.Name).GetValue(x, null));
break;
}
case Type stringType when stringType == typeof(string):
{
helper = helper.MapText("\"" + prop.Name + "\"", x => (string)typeof(T).GetProperty(prop.Name).GetValue(x, null));
break;
}
case Type dateType when dateType == typeof(DateTime) || dateType == typeof(DateTime?):
{
helper = helper.MapTimeStamp("\"" + prop.Name + "\"", x => (DateTime?)typeof(T).GetProperty(prop.Name).GetValue(x, null));
break;
}
case Type decimalType when decimalType == typeof(decimal) || decimalType == typeof(decimal?):
{
helper = helper.MapMoney("\"" + prop.Name + "\"", x => (decimal?)typeof(T).GetProperty(prop.Name).GetValue(x, null));
break;
}
case Type doubleType when doubleType == typeof(double) || doubleType == typeof(double?):
{
helper = helper.MapDouble("\"" + prop.Name + "\"", x => (double?)typeof(T).GetProperty(prop.Name).GetValue(x, null));
break;
}
case Type floatType when floatType == typeof(float) || floatType == typeof(float?):
{
helper = helper.MapReal("\"" + prop.Name + "\"", x => (float?)typeof(T).GetProperty(prop.Name).GetValue(x, null));
break;
}
case Type guidType when guidType == typeof(Guid):
{
helper = helper.MapUUID("\"" + prop.Name + "\"", x => (Guid)typeof(T).GetProperty(prop.Name).GetValue(x, null));
break;
}
}
}
return helper;
}
আমি এটি নিম্নলিখিত উপায়ে ব্যবহার করি (আন্ডারটেকিং নামে আমার সত্তা ছিল):
var undertakingHelper = BulkMapper.CreateHelper<Model.Undertaking>("dbo", nameof(Model.Undertaking));
undertakingHelper.SaveAll(transaction.UnderlyingTransaction.Connection as Npgsql.NpgsqlConnection, undertakingsToAdd));
আমি লেনদেনের সাথে একটি উদাহরণ দেখিয়েছি, তবে এটি প্রসঙ্গে থেকে ফিরে আসা সাধারণ সংযোগের মাধ্যমেও করা যেতে পারে। আন্ডারটাকিংস টোএডিড হ'ল সাধারণ সত্তার রেকর্ডগুলির সংখ্যা প্রচুর, যা আমি ডিবিতে বাল্ক ইনসার্ট করতে চাই।
এই সমাধানটি, যা আমি কয়েক ঘন্টা গবেষণা এবং চেষ্টা করার পরে পেয়েছি, যেমন আপনি অনেক দ্রুত এবং শেষ পর্যন্ত ব্যবহার করা সহজ এবং বিনামূল্যে আশা করতে পারেন! আমি কেবল আপনাকে উপরে উল্লিখিত কারণগুলির জন্যই এই সমাধানটি ব্যবহার করার পরামর্শ দিচ্ছি, কারণ এটি কেবলমাত্র একমাত্র যার সাথে পোস্টগ্রেএসকিএল নিয়ে আমার কোনও সমস্যা ছিল না, অন্যান্য অনেকগুলি সমাধান যেমন নির্দ্বিধায় স্কেলসার্ভারের সাথে কাজ করে।