আমি কেবল EF কোড ফার্স্ট সিটিপি 5 ব্যবহার করে বাইনারি (ফাইল) ডেটা সংরক্ষণ এবং পুনরুদ্ধার করার কোনও সহজ উপায় আছে কিনা তা আবিষ্কার করার চেষ্টা করছি? আমি এটিকে ফাইলস্ট্রেম প্রকারটি ব্যবহার করতে চাই, তবে আমি এটি কার্যকর করার জন্য কিছু উপায় খুঁজছি।
আমি কেবল EF কোড ফার্স্ট সিটিপি 5 ব্যবহার করে বাইনারি (ফাইল) ডেটা সংরক্ষণ এবং পুনরুদ্ধার করার কোনও সহজ উপায় আছে কিনা তা আবিষ্কার করার চেষ্টা করছি? আমি এটিকে ফাইলস্ট্রেম প্রকারটি ব্যবহার করতে চাই, তবে আমি এটি কার্যকর করার জন্য কিছু উপায় খুঁজছি।
উত্তর:
আপনি FILESTREAM
EF এ এসকিউএল ব্যবহার করতে পারবেন না । EF বিভিন্ন ডাটাবেস সার্ভারের শীর্ষে কাজ করার কথা রয়েছে তবে ফাইল স্ট্রিম বৈশিষ্ট্যটি এসকিউএল ২০০৮ এর নতুন বৈশিষ্ট্য এবং আরও নতুন। আপনি এটি পুরানো উপায়ে করার চেষ্টা করতে পারেন - varbinary(max)
আপনার ডাটাবেস টেবিলটিতে ব্যবহার করুন এবং আপনার ম্যাপ করা ক্লাসে বাইট অ্যারে ব্যবহার করুন।
সম্পাদনা করুন:
সামান্য ব্যাখ্যা - আপনি FILESTREAM
ডাটাবেসে ব্যবহার করতে পারেন তবে EF স্ট্রিমিংয়ের সুবিধা নেবে না। এটি এটি স্ট্যান্ডার্ড হিসাবে লোড করবে varbinary(max)
।
ProductImage
অলস লোডিং পরিচালনা করতে এবং টেবিলটি স্বাভাবিক করার জন্য আমি সর্বদা ওয়ান-টু-ও-তে সংঘের মতো অন্য শ্রেণি তৈরি করি :
public class ProductImage
{
public int ProductId { get; private set; }
public byte[] Image { get; set; }
}
লাডিসালভ যেমন উল্লেখ করেছেন তেমনভাবে আপনার সম্পত্তিটিকে বাইট হিসাবে ঘোষণা করুন []।
public class Product
{
public int Id { get; private set; }
public string Name { get; set; }
public byte[] ProductImage { get; set; }
}
এটা প্রায় কাছাকাছি। আপনি সম্পত্তিটি মানচিত্র না রাখলে কনভেনশনটি কী এটি মানচিত্র varbinary(max)
। আপনার যদি ইতিমধ্যে ডাটাবেসে কোনও চিত্র কলাম থাকে কেবলমাত্র [Column(TypeName = "image")]
প্রোডাক্ট ইমেজ সম্পত্তিটিতে যুক্ত করুন বা আপনি যদি কোড ম্যাপিং পছন্দ করেন তবে প্রসঙ্গ শ্রেণিতে এটি আপনার অনমোডেলক্রিয়াটিং ওভাররাইডে যুক্ত করুন:
modelBuilder.Entity<Product>().Property(p => p.ProductImage).HasColumnType("image");
আমার এটির সমস্যাটি হ'ল সম্পত্তিটি অলস করার কোনও উপায় আমি পাইনি কারণ আমি প্রতিবার কোনও পণ্য আনার সময় বাইনারি ডেটা লোড করতে চাই না। আমি নিশ্চিত না যে আমি সঠিকভাবে স্মরণ করেছি তবে এনএইচবারনেট এটি বক্সের বাইরে করতে পারে।