সত্তা ফ্রেমওয়ার্ক কোড প্রথম সিটিপি 5 ব্যবহার করে কীভাবে চিত্রগুলি সঞ্চয় করবেন?


83

আমি কেবল EF কোড ফার্স্ট সিটিপি 5 ব্যবহার করে বাইনারি (ফাইল) ডেটা সংরক্ষণ এবং পুনরুদ্ধার করার কোনও সহজ উপায় আছে কিনা তা আবিষ্কার করার চেষ্টা করছি? আমি এটিকে ফাইলস্ট্রেম প্রকারটি ব্যবহার করতে চাই, তবে আমি এটি কার্যকর করার জন্য কিছু উপায় খুঁজছি।

উত্তর:


41

আপনি FILESTREAMEF এ এসকিউএল ব্যবহার করতে পারবেন না । EF বিভিন্ন ডাটাবেস সার্ভারের শীর্ষে কাজ করার কথা রয়েছে তবে ফাইল স্ট্রিম বৈশিষ্ট্যটি এসকিউএল ২০০৮ এর নতুন বৈশিষ্ট্য এবং আরও নতুন। আপনি এটি পুরানো উপায়ে করার চেষ্টা করতে পারেন - varbinary(max)আপনার ডাটাবেস টেবিলটিতে ব্যবহার করুন এবং আপনার ম্যাপ করা ক্লাসে বাইট অ্যারে ব্যবহার করুন।

সম্পাদনা করুন:

সামান্য ব্যাখ্যা - আপনি FILESTREAMডাটাবেসে ব্যবহার করতে পারেন তবে EF স্ট্রিমিংয়ের সুবিধা নেবে না। এটি এটি স্ট্যান্ডার্ড হিসাবে লোড করবে varbinary(max)


113

ProductImageঅলস লোডিং পরিচালনা করতে এবং টেবিলটি স্বাভাবিক করার জন্য আমি সর্বদা ওয়ান-টু-ও-তে সংঘের মতো অন্য শ্রেণি তৈরি করি :

public class ProductImage
{
    public int ProductId { get; private set; }
    public byte[] Image { get; set; }
}

4
ফাইল চিত্রের কলামটি অন্তর্ভুক্ত না করে এমন একটি দৃষ্টিভঙ্গি তৈরি করা এবং তারপরে ইএফ-তে একটি দ্বিতীয় সত্তা তৈরি করা কি এত সহজ হবে না যে টেবিলের পরিবর্তে ভিউটির দিকে ইঙ্গিত করে
সি। তালিকা

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

65

লাডিসালভ যেমন উল্লেখ করেছেন তেমনভাবে আপনার সম্পত্তিটিকে বাইট হিসাবে ঘোষণা করুন []।

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");

আমার এটির সমস্যাটি হ'ল সম্পত্তিটি অলস করার কোনও উপায় আমি পাইনি কারণ আমি প্রতিবার কোনও পণ্য আনার সময় বাইনারি ডেটা লোড করতে চাই না। আমি নিশ্চিত না যে আমি সঠিকভাবে স্মরণ করেছি তবে এনএইচবারনেট এটি বক্সের বাইরে করতে পারে।


হ্যাঁ, এনহাইবারনেট বাক্সের বাইরে কলাম-নির্দিষ্ট অলস-লোডিং করতে পারে: ayende.com/blog/4377/nhibernate-new-feचर- lazy- properties
গ্যাবে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.