কোডটি প্রথম সত্তা ফ্রেমওয়ার্কে [কীভাবে বন্ধ করা হয়েছে]


87

সত্তা ফ্রেমওয়ার্ক কোডে আমি কীভাবে ডাটাবেস ভিউটি ব্যবহার করতে পারি,


4
নীচের উত্তরগুলির মধ্যে কোনওটি কীভাবে EF মাইগ্রেশন ব্যবহার করে একটি ভিউ তৈরি করবেন তা ব্যাখ্যা করে না। অনুরূপ প্রশ্নের জন্য এই উত্তরটি দেখুন ।
রুডি

ঠিক একই প্রশ্নের একটি থ্রেড এখানে। - স্ট্যাকওভারফ্লো.com
ডিভ তিওয়ারি

আমার সমাধান চেষ্টা করুন । এটি দর্শন হিসাবে চিহ্নিত টেবিলগুলির জন্য মাইগ্রেশন প্রজন্মকে বাধা দেয়
kogoia

উত্তর:


95

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

  1. দেখার জন্য একটি পোকো ক্লাস তৈরি করুন; উদাহরণস্বরূপ FooView
  2. DbContext শ্রেণিতে DbSet সম্পত্তি যুক্ত করুন
  3. ভিউর জন্য আলাদা নাম সেট করতে (ToTable ("Foo") ব্যবহার করে; কনস্ট্রাক্টরে) বা নির্দিষ্ট বৈশিষ্ট্য নির্ধারণ করতে একটি FooViewConfigration ফাইল ব্যবহার করুন

    public class FooViewConfiguration : EntityTypeConfiguration<FooView>      
    {
        public FooViewConfiguration()
        {
            this.HasKey(t => t.Id);
            this.ToTable("myView");
        }
    }
    
  4. মডেল বিল্ডারে FooViewConfigration ফাইলটি যুক্ত করুন, উদাহরণস্বরূপ প্রসঙ্গে ওমোডেলক্রিয়াটিং পদ্ধতিটি ওভারভারাইডিং:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new FooViewConfiguration ());
    }
    

64
"কোড ফার্স্ট" ধরে না নেওয়ার জন্য +1 == অটো ডাটাবেস উত্পন্ন
অন ​​26 নভেম্বর

4
@ ডেভ জেলিসন আপনি কি বিস্তৃত হতে যত্নবান হবেন, বা কোনও আইডিয়েটবেস ইনিটিয়ালাইজারের অংশ হিসাবে একটি ভিউ যুক্ত করার জন্য একটি লিঙ্ক সরবরাহ করবেন
রাল্ফ শিলিংটন

19
এটি কি কেবল আমি, বা প্রত্যেকে মাইগ্রেশন দ্বারা তৈরি খালি টেবিল পাচ্ছে? এড়াতে কি উপায় আছে?
ক্রেমেনা লালোভা

4
এখানে কেবল নিশ্চিত করেই, এই সমাধানটির জন্য কি এসকিউএল ডাটাবেসে আগে থেকেই বাহ্যিকভাবে ভিউ তৈরি করা দরকার? অ্যাড-মাইগ্রেশন / আপডেট-ডাটাবেস কমান্ডের মাধ্যমে কোডটিতে ভিউটি সংজ্ঞায়িত করা এবং এটি ডাটাবেসে পপুলেশন করা সম্ভব?
frostshoxx

6
কিছু জিনিস. 1. এই উত্তরটি আপনাকে এসকিউএল ব্যবহার করে ম্যানুয়ালি ভিউ তৈরি করতে হবে তা উল্লেখ করতে ব্যর্থ হয়েছে, এটি কোনও মাইগ্রেশন ব্যবহার করে করা যেতে পারে। ২. শ্রেণির নামটি যদি ভিউ নামের সাথে মেলে তবে আপনাকে ভিউ নামটি কনফিগার করতে হবে না। ৩. আপনি ডেটাঅ্যানোটেশনগুলি এর মতো ব্যবহার করতে পারেন:, [Table("myView")]এটি তৈরির চেয়ে যুক্তিযুক্তভাবে সহজ EntityTypeConfiguration
রুডি

23

এটি একটি আপডেট হতে পারে তবে ইএফ কোডের সাথে ভিউগুলি ব্যবহার করার জন্য প্রথমে ক্লাসের শীর্ষে কেবলমাত্র [টেবিল ("নেমঅফভিউ")] যুক্ত করুন এবং অন্য যে সমস্ত হুপের মধ্য দিয়ে যাচ্ছেন সেগুলি না করে সবারই কাজ করা উচিত। এছাড়াও আপনাকে কলামগুলির মধ্যে একটি [কী] কলাম হিসাবে প্রতিবেদন করতে হবে। এটি প্রয়োগ করার জন্য নীচে আমার নমুনা কোডটি এখানে।

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace SomeProject.Data
{
    [Table("SomeView")]
    public class SomeView
    {
        [Key]
        public int NameID { get; set; }
        public string Name { get; set; }
    }
}

এবং এখানে প্রসঙ্গটি দেখতে কেমন

using System.Data.Entity;

namespace SomeProject.Data
{
    public class DatabaseContext : DbContext
    {
        public DbSet<SomeView> SomeViews { get; set; }
    }
}

4
এটি গ্রহণযোগ্য উত্তর হিসাবে সমান, এটি ডেটাঅনোটেশন ব্যবহার করে তবে গ্রহণযোগ্য উত্তরটি ইএফ ফ্লুয়েড এপিআই ব্যবহার করে।
রুডি

4
আসলে না এটা না। আমি সাফল্য ছাড়াই গ্রহণযোগ্য উত্তরের চেষ্টা করেছি এবং এটি আমার পক্ষে ভাল কাজ করে না। তবে তারপরে আমি মাইগ্রেশনগুলি ব্যবহার করছি যাতে এটিতে প্রভাব ফেলতে পারে। আমি দেখতে পেলাম যে আমার মাইগ্রেশনগুলি প্রথমে আমাকে করতে হবে তখন আমার ভিউ ক্লাসটি যুক্ত করুন যেহেতু এটি ডেটাবেজে ইতিমধ্যে বিদ্যমান ছিল। আমাদের যদি ইতিমধ্যে ডাটাবেসে বিদ্যমান সারণী থাকে তবে আমরা ঠিক একইভাবে এটি পরিচালনা করব। যেহেতু একটি দৃশ্য একটি "ভার্চুয়াল টেবিল" সত্তা ফ্রেমওয়ার্কের টেবিল সিনট্যাক্সটি এখনও কাজ করে।
চার্লস ওভেন

12

আপনি যা চান তা হ'ল ডি-নরমালাইজড অবজেক্টগুলির একগুচ্ছ, তবে আপনি কেবলমাত্র IQueryable<TDenormolized>আপনার DbContextক্লাসে পাবলিক গেট-ওয়ান সম্পত্তি তৈরি করতে পারেন ।

ইন getআপনি আপনার ডি সাধারণ বস্তুর মধ্যে ডি normoalized মান প্রকল্পের একটি Linq ফলাফলের ফিরে যান। এটি ডিবি ভিউ লেখার চেয়ে ভাল হতে পারে কারণ আপনি প্রোগ্রামিং করছেন, আপনি কেবল selectবিবৃতি ব্যবহার করেই সীমাবদ্ধ নন । এছাড়াও এটি টাইপ টাইপ নিরাপদ।

ToList()কলগুলির মতো গণনাগুলি ট্রিগার না করার বিষয়ে সাবধানতা অবলম্বন করুন , এটি পিছিয়ে যাওয়া ক্যোয়ারীটি ভেঙে দেবে এবং আপনি ডাটাবেস থেকে মিলিয়ন রেকর্ড ফিরে পেয়ে আপনার অ্যাপ্লিকেশন সার্ভারে এগুলি ফিল্টার করতে পারেন।

আমি জানি না এটি সঠিক উপায় কিনা, তবে আমি চেষ্টা করেছি এবং এটি আমার পক্ষে কাজ করে।


6
আমি মতামতটি ব্যবহার করতে চাইছি তার একটি কারণ হ'ল ইএফ দ্বারা উত্পাদিত এসকিউএল সর্বদা 'সুন্দর' হয় না - আমাদের মডেলটিতে কিছু উত্তরাধিকারের স্তরবিন্যাস রয়েছে (খুব দেরি হওয়া সমস্যাগুলি সম্পর্কে জানতে পেরেছি ...) এবং ভিউগুলি ব্যবহার করে আমাদের অনুমতি দেয় ম্যানুয়ালি এসকিউএল তৈরি করতে। কেন একটি দৃশ্য পছন্দনীয় হবে তার ঠিক একটি পাল্টা বিন্দু
কার্ল

4
এটি না করার অন্য কারণটি হ'ল পুনরাবৃত্ত সাধারণ টেবিল এক্সপ্রেশনগুলির ব্যবহার হতে পারে, যা লিনকুতে উপলব্ধ নয়। তবে অন্যথায় এটি সহজ দৃশ্যের জন্য একটি ভাল পরামর্শ।
টম পাউরেক

4
যদি আপনি কোনও সূচকযুক্ত দৃশ্যের সুবিধাগুলি ব্যবহার করতে চান তবে ভিউটির পরিবর্তে কোনও সম্পত্তি ব্যবহার করা কোনও বিকল্প নয় ।
রুডি

"আপনি কেবলমাত্র নির্বাচিত বিবৃতি ব্যবহার করেই সীমাবদ্ধ নন"। আপনি এই দ্বারা কি বোঝাতে চেয়েছেন? আপনি লিনকিউ দিয়ে যা কিছু করতে পারেন সেলেক্ট স্টেটমেন্ট ব্যবহার করেই করা যেতে পারে, অন্যদিকে যেমন একইভাবে বলা যায় না।
রুডি

3

আমি জানি এটি একটি পুরানো প্রশ্ন এবং এখানে অনেক উত্তর রয়েছে তবে আমি যখন এই উত্তরটি ব্যবহার করি তখন আমি একটি সমস্যা বাধ্য করেছিলাম এবং প্যাকেজ ম্যানেজার কনসোলে আপডেট-ডাটাবেস কমান্ডটি ব্যবহার করার সময় একটি ত্রুটি ঘটেছিল:

ডাটাবেসে ইতিমধ্যে '...' নামে একটি অবজেক্ট রয়েছে।

এবং আমি এই সমস্যাটি সমাধান করতে এই পদক্ষেপগুলি ব্যবহার করি:

  1. প্যাকেজ ম্যানেজার কনসোলে এই কমান্ডটি চালান: অন্তর্ভুক্ত অ্যাড-মাইগ্রেশন
  2. মাইগ্রেশন ফোল্ডারের অধীনে, আপনি ..._ intial.cs ফাইলটি খুঁজে পেতে পারেন, এটি খুলুন এবং আপনার মানচিত্রের জন্য চান এমন শ্রেণীর কোনও মন্তব্য কমান্ড বা মুছুন can
  3. এখন আপনি সাধারণত আপনার মডেলগুলিতে অন্য কোনও পরিবর্তনের জন্য আপডেট-ডাটাবেস কমান্ডটি ব্যবহার করতে পারেন

আশা করি এটা সাহায্য করবে.


4
ধন্যবাদ! এটি সত্যিই সাহায্য করেছে! অতিরিক্ত হিসাবে, কেবলমাত্র ইএফ মাইগ্রেশনগুলির সাহায্যে উত্পন্ন কোড অপসারণের পরিবর্তে আপনি সেখানে যুক্ত করতে পারেন migrationBuilder.Sql("CREATE OR REPLACE VIEW ...); যাতে সহকর্মীরাও এটি ব্যবহার করে তাদের ডাটাবেস আপগ্রেড করতে পারে।
সমৃদ্ধ_ ধনী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.