সত্তা ফ্রেমওয়ার্ক - কোড প্রথম - তালিকা স্ট্রিং করতে পারবেন না <স্ট্রিং>


106

আমি এই ধরনের ক্লাস লিখেছি:

class Test
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public List<String> Strings { get; set; }

    public Test()
    {
        Strings = new List<string>
        {
            "test",
            "test2",
            "test3",
            "test4"
        };
    }
}

এবং

internal class DataContext : DbContext
{
    public DbSet<Test> Tests { get; set; }
}

রান কোডের পরে:

var db = new DataContext();
db.Tests.Add(new Test());
db.SaveChanges();

আমার তথ্য সংরক্ষণ করা হচ্ছে কিন্তু ঠিক Idস্ট্রিংগুলির তালিকায় আমার কাছে কোনও টেবিল বা সম্পর্ক নেই ।

আমি কি ভুল করছি? আমি স্ট্রিংস তৈরির চেষ্টাও করেছি virtualতবে এটি কোনও পরিবর্তন হয়নি।

আপনার সাহায্যের জন্য ধন্যবাদ।


4
আপনি কীভাবে প্রত্যাশা করবেন <ডিস্টিং> তালিকাটি ডিবিতে সঞ্চিত আছে? যে কাজ করবে না। স্ট্রিং এ এটি পরিবর্তন করুন।
উইক্টর জাচলা

4
আপনার যদি একটি তালিকা থাকে তবে এটি কোনও সত্তাকে নির্দেশ করতে হবে। EF তালিকাটি সঞ্চয় করার জন্য এটির দ্বিতীয় সারণির প্রয়োজন। দ্বিতীয় সারণীতে এটি আপনার তালিকা থেকে সমস্ত কিছু রাখবে এবং আপনার Testসত্তার দিকে ফিরে নির্দেশ করার জন্য একটি বিদেশী কী ব্যবহার করবে । সুতরাং Idসম্পত্তি এবং MyStringসম্পত্তি দিয়ে একটি নতুন সত্তা তৈরি করুন, তারপরে একটি তালিকা তৈরি করুন।
ড্যানিয়েল গ্যাব্রিয়েল

4
ডান ... এটি সরাসরি ডিবিতে সংরক্ষণ করা যায় না তবে আমি আশা করি সত্তা ফ্রেমওয়ার্ক নিজে থেকে এটি করার জন্য একটি নতুন সত্তা তৈরি করবে। আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ।
পল

উত্তর:


162

সত্তা ফ্রেমওয়ার্ক আদিম ধরণের সংগ্রহগুলি সমর্থন করে না। আপনি হয় একটি সত্তা তৈরি করতে পারেন (যা অন্য কোনও টেবিলে সংরক্ষণ করা হবে) অথবা স্ট্রিং হিসাবে আপনার তালিকাটি সংরক্ষণ করতে কিছু স্ট্রিং প্রসেসিং করতে পারেন এবং সত্তাটি বাস্তবায়িত হওয়ার পরে তালিকাটি পপুলেট করুন।


একটি সত্তা সত্তা একটি তালিকা আছে, তাহলে কি? কীভাবে ম্যাপিংটি সংরক্ষণ হবে?
এ_আরনল্ড

নির্ভর করে - খুব সম্ভবত একটি পৃথক সারণীতে।
পাভেল

সিরিয়ালাইজ করার চেষ্টা করতে পারে এবং তারপরে জেসন ফর্ম্যাট করা পাঠ্যটি সংকুচিত ও সংরক্ষণ করতে পারে, বা এনক্রিপ্ট করতে পারে এবং প্রয়োজনে এটি সংরক্ষণ করতে পারে। আপনার পক্ষে জটিল কাঠের টেবিল ম্যাপিংয়ের কাঠামোটি যেভাবেই করা যায় না।
নিক্লাস

101

EF কোর 2.1+:

সম্পত্তি:

public string[] Strings { get; set; }

অনমোডেল ক্রিয়েটিং:

modelBuilder.Entity<YourEntity>()
            .Property(e => e.Strings)
            .HasConversion(
                v => string.Join(',', v),
                v => v.Split(',', StringSplitOptions.RemoveEmptyEntries));

5
EF কোর জন্য দুর্দান্ত সমাধান। যদিও মনে হচ্ছে এটি স্ট্রিং রূপান্তরকরণের ক্ষেত্রে ঝকঝকে চরিত্রে একটি সমস্যা রয়েছে। আমাকে এটির মতো বাস্তবায়ন করতে হয়েছিল: .হ্যাসকভার্সন (v => স্ট্রিং.জয়িন (";", ভি), ভি => ভি.স্প্লিট (নতুন চর [] {';' St, স্ট্রিংস্প্লিটঅ্যাপশনস। রিমুভ এন্ট্রি));
পিটার কলার

8
এটিই কেবলমাত্র সঠিক উত্তর আইএমএইচও। অন্য সকলের জন্য আপনার নিজের মডেলটি পরিবর্তন করা দরকার এবং এটি নীতি লঙ্ঘন করে যে ডোমেন মডেলগুলি দৃ pers়তা অজ্ঞ হওয়া উচিত। (এটা জরিমানা যদি আপনি পৃথক অধ্যবসায় এবং ডোমেইন মডেল ব্যবহার করছেন, কিন্তু কয়েক মানুষ আসলে যে কি হয়।)
Marcell টথ

4
আপনার আমার সম্পাদনা অনুরোধটি গ্রহণ করা উচিত কারণ আপনি স্ট্রিংয়ের প্রথম যুক্তি হিসাবে চর ব্যবহার করতে পারবেন না oinজইন এবং স্ট্রিংয়ের প্রথম যুক্তি হিসাবে আপনাকে একটি চর সরবরাহ করতে হবে p আপনি যদি স্ট্রিংস্প্লিটঅપ્শনগুলি সরবরাহ করতে চান তবে স্প্লিট করুন।
ডোমিনিক

4
নেট কোর আপনি করতে পারেন। আমি আমার এক প্রকল্পে কোডের এই সঠিক অংশটি ব্যবহার করছি।
সাসান

4
.NET স্ট্যান্ডার্ড
সাসান

61

এই উত্তরটি @ সাসান এবং @ সিএডি ব্লকের দ্বারা সরবরাহ করাগুলির উপর ভিত্তি করে ।

আপনি যদি নেট। স্ট্যান্ডার্ড 2 এ এটি ব্যবহার করতে চান বা নিউটনসফ্ট না চান তবে নীচে জ্যানিফের উত্তরটি দেখুন

কেবল ইএফ কোর 2.1+ (নেট স্ট্যান্ডার্ড সামঞ্জস্যপূর্ণ নয়) (নিউটোনসট JsonConvert) এর সাথে কাজ করে

builder.Entity<YourEntity>().Property(p => p.Strings)
    .HasConversion(
        v => JsonConvert.SerializeObject(v),
        v => JsonConvert.DeserializeObject<List<string>>(v));

ইএফ কোর ফ্লুয়েন্ট কনফিগারেশন ব্যবহার করে আমরা জেএসএন Listথেকে / এ সিরিয়ালাইজ / ডিসরিয়ালাইজ করি ।

এই কোডটি আপনার পক্ষে চেষ্টা করতে পারে এমন সমস্ত কিছুর নিখুঁত মিশ্রণ:

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

9
ব্রাভো, এটি সম্ভবত গ্রহণযোগ্য উত্তর হওয়া উচিত
শিরকান

4
আমি এটি নেট ফ্রেমওয়ার্ক এবং ইএফ 6 এ কাজ করে থাকতে চাই, এটি সত্যিই মার্জিত সমাধান।
সিএডি

এটি একটি আশ্চর্যজনক সমাধান। আপনাকে ধন্যবাদ
মার্লন

আপনি কি সেই মাঠে খোঁজ নিতে সক্ষম? আমার প্রচেষ্টা খারাপভাবে ব্যর্থ হয়েছে: var result = await context.MyTable.Where(x => x.Strings.Contains("findme")).ToListAsync();কিছুই খুঁজে পায় না।
নিকোলা ইয়ারোচি

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

42

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

public class Test
{
    public Test()
    {
        _strings = new List<string>
        {
            "test",
            "test2",
            "test3",
            "test4"
        };
    }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    private List<String> _strings { get; set; }

    public List<string> Strings
    {
        get { return _strings; }
        set { _strings = value; }
    }

    [Required]
    public string StringsAsString
    {
        get { return String.Join(',', _strings); }
        set { _strings = value.Split(',').ToList(); }
    }
}

4
সরকারী সম্পত্তি ব্যবহারের পরিবর্তে স্থির পদ্ধতিগুলি কেন নয়? (বা আমি আমার পদ্ধতিগত প্রোগ্রামিং পক্ষপাত দেখিয়ে দিচ্ছি?)
ডাস্টন

@ র্যান্ডমস কেন 2 টি তালিকা সংজ্ঞায়িত করা প্রয়োজন? সম্পত্তি হিসাবে একটি এবং প্রকৃত তালিকা হিসাবে এক? আমি এখানে বন্ডিং কীভাবে কাজ করে তাও ব্যাখ্যা করতে পারলে আমি প্রশংসা করব, কারণ এই সমাধানটি আমার পক্ষে ভালভাবে কাজ করছে না এবং আমি এখানে বাঁধাই করতে পারি না। ধন্যবাদ
লিরানবো

4
একটি বেসরকারী তালিকা রয়েছে, যার সাথে দুটি পাবলিক বৈশিষ্ট্য যুক্ত রয়েছে, স্ট্রিংস, যা আপনি আপনার অ্যাপ্লিকেশনটিতে স্ট্রিং যুক্ত করতে এবং মুছে ফেলার জন্য ব্যবহার করবেন এবং স্ট্রিংসস স্ট্রিং যা কম্বাই দ্বারা বিচ্ছিন্ন তালিকা হিসাবে ডিবিতে সংরক্ষণ করা হবে এমন মান। আপনি যা জিজ্ঞাসা করছেন তা আমি সত্যিই নিশ্চিত নই, বাঁধাই হ'ল ব্যক্তিগত তালিকা _স্ট্রিংস, যা দুটি পাবলিক বৈশিষ্ট্যকে এক সাথে সংযুক্ত করে।
এলোমেলোভাবে

4
দয়া করে মনে রাখবেন যে এই উত্তরটি তারে ,(কমা) এড়ায় না। তালিকার একটি স্ট্রিংয়ে যদি এক বা একাধিক ,(কমা) থাকে তবে স্ট্রিংটি একাধিক স্ট্রিংগুলিতে বিভক্ত হয়।
5:37

4
ইন string.Joinকমা উদ্ধৃতি চিহ্ন (ক স্ট্রিং এর জন্য), না একক উদ্ধৃতি (ক গৃহস্থালির কাজ জন্য) দ্বারা বেষ্টিত করা উচিত। এমএসডিএন.মাইক্রোসফটকম /en-us/library/57a79xd0(v=vs.110).aspx
মাইকেল ব্র্যান্ডন মরিস

29

উদ্ধার করতে JSON.NET

আপনি এটি ডাটাবেস অব্যাহত রাখার জন্য এটি JSON এ সিরিয়ালিয়াল করুন এবং .NET সংগ্রহ পুনর্গঠন করতে এটি ডিসরিয়ালাইজ করুন। এটি সত্তা ফ্রেমওয়ার্ক 6 এবং এসকিউএলাইটের সাথে আমার প্রত্যাশার চেয়ে আরও ভাল পারফরম্যান্স বলে মনে হচ্ছে। আমি জানি আপনি চেয়েছিলেন List<string>তবে এখানে আরও জটিল সংগ্রহের উদাহরণ রয়েছে যা ঠিক কাজ করে।

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

(সম্পর্কহীন স্পর্শকাতর): আপনি আরও জটিল ধরণের সাথে একই কাজ করতে পারেন তবে আপনাকে নিজের কাছে জিজ্ঞাসা করা দরকার যে আপনি কেবল তার জন্য সেই বস্তুর বৈশিষ্ট্যগুলি খুব শক্ত করে অনুসন্ধান করেছেন? (হ্যাঁ, আমার ক্ষেত্রে)

using Newtonsoft.Json;
....
[NotMapped]
public Dictionary<string, string> MetaData { get; set; } = new Dictionary<string, string>();

/// <summary> <see cref="MetaData"/> for database persistence. </summary>
[Obsolete("Only for Persistence by EntityFramework")]
public string MetaDataJsonForDb
{
    get
    {
        return MetaData == null || !MetaData.Any()
                   ? null
                   : JsonConvert.SerializeObject(MetaData);
    }

    set
    {
        if (string.IsNullOrWhiteSpace(value))
           MetaData.Clear();
        else
           MetaData = JsonConvert.DeserializeObject<Dictionary<string, string>>(value);
    }
}

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

4
আমি একটি উত্তর দিয়েছিলাম যা একে অপরের দৃ strong় পয়েন্টগুলি ব্যবহার করে প্রতিটি উত্তর সমস্যা (কদর্যতা / তথ্য-সুরক্ষা) ঠিক করার জন্য এটির একটি "মার্জ" এবং অন্যটি একটি।
ম্যাথিউ ভিআইএলএস

12

কেবল সহজ করতে -

সত্তা কাঠামো আদিমদের সমর্থন করে না। আপনি এটি মুছে ফেলতে একটি শ্রেণী তৈরি করেন বা স্ট্রিং হিসাবে তালিকাটিকে ফর্ম্যাট করতে অন্য সম্পত্তি যুক্ত করুন:

public ICollection<string> List { get; set; }
public string ListString
{
    get { return string.Join(",", List); }
    set { List = value.Split(',').ToList(); }
}

4
তালিকার আইটেমটিতে স্ট্রিং না থাকতে পারে এটি এটি। অন্যথায়, আপনি এটি এড়ানো প্রয়োজন। অথবা আরও জটিল পরিস্থিতিতে তালিকাকে সিরিয়ালাইজ / ডিসাইরিয়ালাইজ করতে।
অ্যাডাম তাল

4
এছাড়াও, আইকোলিকেশন সম্পত্তিটিতে [নটম্যাপেড] ব্যবহার করতে ভুলবেন না
বেন পিটারসেন

12

@ ম্যাথিউ ভায়ালসকে সামান্য টুইট করুন এর উত্তর , এখানে .NET স্ট্যান্ডার্ড সামঞ্জস্যপূর্ণ এইভাবে Newtonsoft.Json উপর নির্ভরতা দূর নতুন System.Text.Json serializer ব্যবহার স্নিপেট আছে।

using System.Text.Json;

builder.Entity<YourEntity>().Property(p => p.Strings)
    .HasConversion(
        v => JsonSerializer.Serialize(v, default),
        v => JsonSerializer.Deserialize<List<string>>(v, default));

উল্লেখ্য যে উভয় ক্ষেত্রে দ্বিতীয় যুক্তি রয়েছে Serialize() এবং Deserialize()সাধারণত alচ্ছিক হলেও আপনি একটি ত্রুটি পাবেন:

একটি এক্সপ্রেশন ট্রিতে orচ্ছিক আর্গুমেন্টগুলি ব্যবহার করে এমন কোনও কল বা প্রার্থনা নাও থাকতে পারে

প্রতিটি পরিষ্কার হয়ে যাওয়ার জন্য এটি স্পষ্টভাবে ডিফল্ট (নাল) এ সেট করে।


4
নতুন সিরিয়ালাইজেশন বিকল্প যুক্ত করতে আমি আমার উত্তর আপডেট করার কথা ভাবছিলাম। আমি defaultআপনার জন্য optionচ্ছিক প্যারাম ট্রিকের ব্যবহার সত্যিই পছন্দ করি । খুব পরিষ্কার কোডের জন্য তৈরি করে।
ম্যাথিউ ভিআইএলএস

6

অবশ্যই পাভেল সঠিক উত্তর দিয়েছেন । তবে আমি এই পোস্টে দেখতে পেলাম যেহেতু EF 6+ থেকে ব্যক্তিগত সম্পত্তিগুলি সংরক্ষণ করা সম্ভব save সুতরাং আমি এই কোডটি পছন্দ করব, কারণ আপনি কোনও ভুল পদ্ধতিতে স্ট্রিংগুলি সংরক্ষণ করতে পারবেন না।

public class Test
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Column]
    [Required]
    private String StringsAsStrings { get; set; }

    public List<String> Strings
    {
        get { return StringsAsStrings.Split(',').ToList(); }
        set
        {
            StringsAsStrings = String.Join(",", value);
        }
    }
    public Test()
    {
        Strings = new List<string>
        {
            "test",
            "test2",
            "test3",
            "test4"
        };
    }
}

7
স্ট্রিংয়ে কমা থাকলে কী হবে?
চক্কি

4
আমি এইভাবে এটি করার সুপারিশ করব না। StringsAsStringsকেবলমাত্র Strings রেফারেন্স পরিবর্তন করা হলে আপডেট করা হবে এবং আপনার উদাহরণে কেবলমাত্র সময়টি নিয়োগ হয়। Stringsনিয়োগের পরে আপনার তালিকা থেকে আইটেমগুলি যুক্ত করা বা অপসারণ করা ব্যাকিং ভেরিয়েবল আপডেট করবে না update StringsAsStringsএটি বাস্তবায়নের যথাযথ উপায় হ'ল তালিকার StringsAsStringsভিউ হিসাবে Stringsঅন্য চারপাশের পরিবর্তে প্রকাশ করা । সম্পত্তির getঅ্যাক্সেসরের সাথে মানগুলিতে একসাথে যোগদান করুন এবং সেগুলি অ্যাকসেসরে StringsAsStringsবিভক্ত করুন set
jduncanator 26'17

ব্যক্তিগত সম্পত্তি যুক্ত করা এড়াতে (যা পার্শ্ব প্রতিক্রিয়া মুক্ত নয়) সিরিয়ালযুক্ত সম্পত্তিটির সেটারটিকে ব্যক্তিগত করে তুলুন। jduncanator অবশ্যই সঠিক: আপনি যদি তালিকার ম্যানিপুলেশনগুলি ধরেন না (একটি পর্যবেক্ষণযোগ্য সংগ্রহ ব্যবহার করবেন?), পরিবর্তনগুলি EF দ্বারা লক্ষ্য করা যাবে না।
লিওনিডাস

@ জেদুনক্যানেটার উল্লেখ করেছেন যে তালিকাটিতে কোনও পরিবর্তন করা হলে এই সমাধানটি কার্যকর হয় না (উদাহরণস্বরূপ এমভিভিএম-এ বাধ্যতামূলক)
ইহাব

2

আপনি এই ScalarCollectionধারকটি ব্যবহার করতে পারেন যা একটি অ্যারে সীমিত করে এবং কিছু হেরফের বিকল্প দেয় ( সংক্ষেপে) ):

ব্যবহার:

public class Person
{
    public int Id { get; set; }
    //will be stored in database as single string.
    public SaclarStringCollection Phones { get; set; } = new ScalarStringCollection();
}

কোড:

using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;

namespace System.Collections.Specialized
{
#if NET462
  [ComplexType]
#endif
  public abstract class ScalarCollectionBase<T> :
#if NET462
    Collection<T>,
#else
    ObservableCollection<T>
#endif
  {
    public virtual string Separator { get; } = "\n";
    public virtual string ReplacementChar { get; } = " ";
    public ScalarCollectionBase(params T[] values)
    {
      if (values != null)
        foreach (var item in Items)
          Items.Add(item);
    }

#if NET462
    [Browsable(false)]
#endif
    [EditorBrowsable(EditorBrowsableState.Never)]
    [Obsolete("Not to be used directly by user, use Items property instead.")]
    public string Data
    {
      get
      {
        var data = Items.Select(item => Serialize(item)
          .Replace(Separator, ReplacementChar.ToString()));
        return string.Join(Separator, data.Where(s => s?.Length > 0));
      }
      set
      {
        Items.Clear();
        if (string.IsNullOrWhiteSpace(value))
          return;

        foreach (var item in value
            .Split(new[] { Separator }, 
              StringSplitOptions.RemoveEmptyEntries).Select(item => Deserialize(item)))
          Items.Add(item);
      }
    }

    public void AddRange(params T[] items)
    {
      if (items != null)
        foreach (var item in items)
          Add(item);
    }

    protected abstract string Serialize(T item);
    protected abstract T Deserialize(string item);
  }

  public class ScalarStringCollection : ScalarCollectionBase<string>
  {
    protected override string Deserialize(string item) => item;
    protected override string Serialize(string item) => item;
  }

  public class ScalarCollection<T> : ScalarCollectionBase<T>
    where T : IConvertible
  {
    protected override T Deserialize(string item) =>
      (T)Convert.ChangeType(item, typeof(T));
    protected override string Serialize(T item) => Convert.ToString(item);
  }
}

10
ইঞ্জিনিয়ারডের চেয়ে কিছুটা বেশি লাগছে ?!
ফ্যালকো আলেকজান্ডার

4
@ ফ্যালকো অ্যালেক্সান্ডার আমি আমার পোস্ট আপডেট করেছি ... সম্ভবত কিছুটা ভারবস কিন্তু কাজটি করে। আপনি NET462উপযুক্ত পরিবেশের সাথে প্রতিস্থাপন করেছেন বা এটি এতে যুক্ত করেছেন তা নিশ্চিত করুন ।
শিমি ওয়েটজ্যান্ডলার

4
এটি একসাথে রাখার প্রচেষ্টার জন্য +1। সমাধানটি স্ট্রিংগুলির অ্যারে সংরক্ষণের জন্য কিছুটা ওভারকিল :)
GETah

1

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

https://www.npgsql.org/efcore/mapping/array.html

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