এসকিউএল সার্ভার 2008 এবং এসকিউএল সার্ভার 2005 এবং তারিখের সময় ব্যবহার করে


118

আমি ২০০৮ ডাটাবেসের বিপরীতে একটি সত্তা ফ্রেমওয়ার্ক মডেল তৈরি করেছি। সমস্ত ২০০৮ ডাটাবেসের বিরুদ্ধে ঠিক আছে works আমি যখন 2005 এর ডাটাবেসে সত্তাটি আপডেট করার চেষ্টা করি তখন আমি এই ত্রুটিটি পাই।

ব্যবহৃত এসকিউএল সার্ভারের সংস্করণটি ডেটাটাইপ 'ডেটটাইম 2' সমর্থন করে না

আমি ডেটাবেসটি তৈরি করার সময় আমি 2008 সালের কোনও বৈশিষ্ট্য বিশেষভাবে ব্যবহার করি নি। কোডটিতে ডেটটাইম 2 এর জন্য আমি কোনও রেফারেন্স পাই না। এবং হ্যাঁ, কলামটি ডেটাবেজে "ডেটটাইম" হিসাবে সংজ্ঞায়িত করা হয়েছে।

উত্তর:


189

একটি দ্রুত গুগল সমাধানটির মতো দেখতে আমাকে নির্দেশ করে ।

আপনার EDMX একটি ফাইল সম্পাদকে খুলুন (বা ভিজ্যুয়াল স্টুডিওতে "এর সাথে খুলুন" এবং এক্সএমএল সম্পাদক নির্বাচন করুন)। শীর্ষে আপনি স্টোরেজ মডেলটি পাবেন এবং এতে প্রোভাইডার ম্যানিফেস্ট টোকেন একটি বৈশিষ্ট্য রয়েছে। এর মান ২০০৮ থাকা উচিত that এটিকে ২০০৫-এ পরিবর্তন করুন, পুনরায় সংকলন করুন এবং সমস্ত কিছু কাজ করে।

দ্রষ্টব্য: আপনি যখনই ডাটাবেস থেকে মডেলটি আপডেট করবেন তখন আপনাকে এটি করতে হবে।


2
আমি ভুল করে এটিকে ভোট দিয়েছি, এটিকে বাতিল করে দিন, কিন্তু এখন আমি যা করতে চাইছিলাম তা করতে পারছি না এটিই ভোট! সমস্যাটি সন্ধান করার জন্য আপনাকে ধন্যবাদ। আমি যদি সঠিকভাবে বুঝতে পারি তবে ২০০ 2005 থেকে ২০০৮ সাল পর্যন্ত ডাটাবেস থেকে এসকিউএল ২০০ D ডিবি যেখানে মডেলটি আপডেট করার কারণে মানটি বদলাবে? আমার পরিবেশে, আমার বিকাশকারী মেশিনে এসকিউএল ২০০৮ রয়েছে, তবে পরীক্ষার পরিবেশটি ২০০৫ সালে রয়েছে (যা উত্পাদনও খুব বেশি)। আমরা ২০০৮-এ স্থানান্তরিত হওয়া অবধি, আমি কি ঠিক ধরে নিচ্ছি যে এটি ঘটতে থাকবে?
জ্যামিবারো

আমি সাধারণত এটি 2005 এ সেট করি যা প্রোডাকশন ডাটাবেস; আমি ২০০৮ এর উন্নয়নের জন্য ব্যবহার করছি। 2008 পিছনের দিকে সামঞ্জস্যপূর্ণ তাই কোনও সমস্যা নেই। এছাড়াও এটি আপডেট / জেনারেটের পরে ফিরে যেতে হবে। তিক্ত অভিজ্ঞতার পরে EDMX এ যাচাই করার সময় আমি সর্বদা এটি বৈধ করি।
রিচার্ড হ্যারিসন

এই ফিক্স আমার জন্য কাজ করে না ?? forums.asp.net/p/1770522/4838628.aspx/…
ওয়েলশ কিং

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

এটিই একমাত্র সমাধান তবে আপনাকে সচেতন হওয়া উচিত যে প্রতিবার আপনি এডএমএক্স সংশোধন করার সময় এটি করা দরকার কারণ এটি নিজেই ফিরে আসবে
ডেভ হোগান

11

লাইনের দ্রুত দর্শন:

<Schema Namespace="Foobar.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" >

10

এটি অত্যন্ত হতাশাব্যঞ্জক এবং আমি অবাক হয়েছি এমএস এটিকে না করার সিদ্ধান্ত নিয়েছে যাতে আপনি প্রদত্ত এসকিউএল সংস্করণটিকে লক্ষ্য করতে পারেন। আমরা 2005 টার্গেট করছি তা নিশ্চিত করার জন্য আমি একটি সাধারণ কনসোল অ্যাপ্লিকেশন লিখেছি এবং এটি প্রাক বিল্ড পদক্ষেপে কল করেছি।

প্রাক-বিল্ড স্টেপটি এর মতো দেখাচ্ছে:

$(SolutionDir)Artifacts\SetEdmxVer\SetEdmxSqlVersion $(ProjectDir)MyModel.edmx 2005

কোডটি এখানে:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace SetEdmxSqlVersion
{
    class Program
    {
        static void Main(string[] args)
        {
            if (2 != args.Length)
            {
                Console.WriteLine("usage: SetEdmxSqlVersion <edmxFile> <sqlVer>");
                return;
            }
            string edmxFilename = args[0];
            string ver = args[1];
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(edmxFilename);

            XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable);
            mgr.AddNamespace("edmx", "http://schemas.microsoft.com/ado/2008/10/edmx");
            mgr.AddNamespace("ssdl", "http://schemas.microsoft.com/ado/2009/02/edm/ssdl");
            XmlNode node = xmlDoc.DocumentElement.SelectSingleNode("/edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema", mgr);
            if (node == null)
            {
                Console.WriteLine("Could not find Schema node");
            }
            else
            {
                Console.WriteLine("Setting EDMX version to {0} in file {1}", ver, edmxFilename);
                node.Attributes["ProviderManifestToken"].Value = ver;
                xmlDoc.Save(edmxFilename);
            }
        }
    }
}

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

3

উপরের @ ভ্যান্সের হ্যান্ডি কনসোল অ্যাপ্লিকেশন ব্যবহার করে, আমি নিম্নলিখিতটি পূর্বের ঘটনা হিসাবে ব্যবহার করেছি

<Target Name="BeforeBuild">
    <!--Check out BD.edmx, Another.edmx, all configs-->
    <Exec Command="$(SolutionDir)\Library\tf checkout /lock:none $(ProjectDir)Generation\DB.edmx" />
    <Exec Command="$(SolutionDir)\Library\tf checkout /lock:none $(ProjectDir)Generation\Another.edmx" />
    <!--Set to 2008 for Dev-->
    <Exec Condition=" '$(Configuration)' == 'DEV1' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\DB.edmx 2008" />
    <Exec Condition=" '$(Configuration)' == 'DEV1' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\Another.edmx 2008" />
    <Exec Condition=" '$(Configuration)' == 'DEV2' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\DB.edmx 2008" />
    <Exec Condition=" '$(Configuration)' == 'DEV2' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\Another.edmx 2008" />
    <!--Set to 2005 for Deployments-->
    <Exec Condition=" '$(Configuration)' == 'TEST' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\DB.edmx 2005" />
    <Exec Condition=" '$(Configuration)' == 'TEST' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\Another.edmx 2005" />
    <Exec Condition=" '$(Configuration)' == 'PRODUCTION' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\DB.edmx 2005" />
    <Exec Condition=" '$(Configuration)' == 'PRODUCTION' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\Another.edmx 2005" />
  </Target>

বিরক্তিকর পুনর্বাসনে এড়ানো হিসাবে এটি অত্যন্ত কার্যকর। ভ্যান্স ভাগ করে নেওয়ার জন্য ধন্যবাদ।

আমি লাইব্রেরি সলিউশন ফোল্ডারে TF.exe যুক্ত করেছি এবং এটি সাহায্য করে, কারণ আমি এখন বিল্ডের অংশ হিসাবে এডিএমএক্স ফাইলগুলি সম্পাদনা করার চেষ্টা করার আগে পরীক্ষা করে দেখতে পারি। এছাড়াও আমি এটি শর্তগুলির সাথে যুক্ত করেছি, যাতে এটি সার্ভারে মোতায়েনের জন্য 2005 এ চলে যায় এবং ডেভ মেশিন স্লান কনফিগারেশনের জন্য ২০০৮ এ ফিরে আসে। এছাড়াও উল্লেখ করার জন্য আপনাকে লাইব্রেরী ফোল্ডারে (বা অন্য কোথাও আপনি এই বিটগুলি রাখতে চান) প্রকৃত সেটএডএমএক্সএসএইচএলভিভার্সন.এক্সে (এবং .pdb) ফাইল (গুলি) যুক্ত করতে হবে।

অনেক ধন্যবাদ @ ভ্যান্স সত্যিই ঝরঝরে, প্রচুর সময় সাশ্রয়কারী এবং আমার বিল্ডগুলি সম্পূর্ণ স্বয়ংক্রিয় এবং ব্যথা মুক্ত রাখে :)


2

২০১২ বনাম ২০০৮-তেও একই সমস্যা ছিল X এটি এক্সএমপিপিক এবং এক্সএমএলপোক ব্যবহার করে একটি ফাইর বিল্ড ইভেন্টের মাধ্যমে সমাধান করা যেতে পারে:

   <Target Name="BeforeBuild">
      <XmlPeek XmlInputPath="$(ProjectDir)MyModel.edmx"
               Namespaces="&lt;Namespace Prefix='edmx' Uri='http://schemas.microsoft.com/ado/2009/11/edmx'/&gt;&lt;Namespace Prefix='ssdl' Uri='http://schemas.microsoft.com/ado/2009/11/edm/ssdl'/&gt;"
               Query="/edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema/@ProviderManifestToken">
         <Output TaskParameter="Result" ItemName="TargetedSQLVersion" />
      </XmlPeek>

      <XmlPoke Condition="@(TargetedSQLVersion) != 2008"
               XmlInputPath="$(ProjectDir)MyModel.edmx"
               Namespaces="&lt;Namespace Prefix='edmx' Uri='http://schemas.microsoft.com/ado/2009/11/edmx'/&gt;&lt;Namespace Prefix='ssdl' Uri='http://schemas.microsoft.com/ado/2009/11/edm/ssdl'/&gt;"
               Query="/edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema/@ProviderManifestToken"
               Value="2008">
      </XmlPoke>
   </Target>

আপনি যদি স্বয়ংক্রিয় প্রতিস্থাপন অপছন্দ করেন, আপনি কেবল এক্সএমএলপোক টাস্কটিকে একটি ত্রুটিযুক্ত টাস্কের সাথে প্রতিস্থাপন করতে পারেন।


এটি বাহ্যিক এক্সিকিউটেবল ব্যবহারের চেয়ে অনেক ভাল, এমএসবাইল্ডকে অভ্যন্তরীণভাবে সমস্ত অভিনব-নেস পরিচালনা করতে দেয়। এগুলি সহজেই CallTargetপ্রকাশ / বিল্ড কনফিগারেশনের উপর নির্ভর করে শর্তাধীন প্রাক-বিল্ড টার্গেট কার্যগুলির মাধ্যমে সহজেই বেঁধে রাখা যায় । (স্কেল ২০০৫ পরিবেশে মোতায়েনের সময় কেবল ইজি পরিবর্তন হয়)
১:20

1

যারা একই সমস্যার মুখোমুখি হন তবে কোড ফার্স্ট ব্যবহার করছেন তাদের সুবিধার জন্য , কোড ফার্স্টে কীভাবে পরিবর্তন করা যায় সে সম্পর্কে আমার উত্তরটি এখানে দেখুনProviderManifestToken । এতে মডেল নির্মাতার পদ্ধতি কল করার সময় একটি DbModelBuilderম্যানুয়ালি তৈরি করা এবং একটি DbProviderInfoউদাহরণ (যথাযথ টোকেন সহ) পাস করা জড়িত Build


আমি মনে করি Type System Version=SQL Server 2005সংযোগ স্ট্রিংয়ে
সেটটিও

0

আমার কাছে আরও ভাল সমাধান হ'ল ইডিএমএক্স ফাইলটি ম্যানুয়ালি সম্পাদনার পরিবর্তে ডিজাইন মোডে এবং প্রসঙ্গ মেনুতে "ডেটাবেস থেকে আপডেট মডেল ..." এ খোলার এডএমএক্স। আপনার অবশ্যই এটি ডান এসকিউএল সংস্করণটির দিকে ইশারা করতে হবে।


1
আমি মনে করি এটি ওপি-র সমস্যা - তিনি একটি স্থানীয় এসকিউএল ২০০৮ এর বিপরীতে বিকাশ করেছিলেন তবে
২০০ S সালে

এটি কোনও এসকিউএল 2005 দৃষ্টান্ত অ্যাক্সেস না করা অবধি কাজ করে।
ডারসি

1
একটি বিশাল অসুবিধা হ'ল এটি একটি ম্যানুয়াল পদক্ষেপ এবং এভাবে ভুলে যেতে হবে।
জোয়ান

0

SQL2005 v.3 এ আমাদের এই ত্রুটি ছিল, যেখানে এসকিউএল 2003 ভি 4 এ আমাদের এটি ছিল না।

সংযোগের স্ট্রিংয়ে SQL2005 যুক্ত করা আমাদের নির্দিষ্ট সমস্যাটিকে স্থির করে।

আমরা এখনও তা শনাক্ত করতে পারি নি এবং উপরের সমাধান হিসাবে টোকন সরবরাহ করার জন্য কোডটি সংশোধন করতে চাইনি (মোতায়েনের সময় প্রকাশিত সমস্যা)।

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