ডেটটাইম সম্পত্তিটির ডিফল্ট মান তারিখটাইমকে সেট করা the এখন সিস্টেমের অভ্যন্তরে omp কম্পোনেন্টমোডেল ডিফল্ট মান অ্যাট্রিবিউট


97

কেউ কি জানেন যে আমি কীভাবে সিস্টেমটি ব্যবহার করে ডেটটাইম সম্পত্তিটির জন্য ডিফল্ট মান নির্দিষ্ট করতে পারি? কম্পোনেন্টমোডেল ডিফল্টভ্যালু অ্যাট্রিবিউট?

উদাহরণস্বরূপ আমি এটি চেষ্টা:

[DefaultValue(typeof(DateTime),DateTime.Now.ToString("yyyy-MM-dd"))]
public DateTime DateCreated { get; set; }

এবং এটি মানটি একটি ধ্রুবক প্রকাশ হিসাবে প্রত্যাশা করে।

এটি ASP.NET ডায়নামিক ডেটা ব্যবহার করার প্রসঙ্গে। আমি ডেটক্রিটেড কলামটি স্ক্যাফোল্ড করতে চাই না তবে কেবল ডেটটাইম সরবরাহ করি it এখন উপস্থিত না থাকলে এটি। আমি সত্তা ফ্রেমওয়ার্কটিকে আমার ডেটা স্তর হিসাবে ব্যবহার করছি

চিয়ার্স,

অ্যান্ড্রু

উত্তর:


95

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

public DateTime DateCreated
{
   get
   {
      return this.dateCreated.HasValue
         ? this.dateCreated.Value
         : DateTime.Now;
   }

   set { this.dateCreated = value; }
}

private DateTime? dateCreated = null;

4
আপনাকে ধন্যবাদ, আপনি সম্পাদনার আগে আমি অন্যভাবে গিয়ে সেটারটি বাধা দিয়েছিলাম। সহায়তার জন্য চিয়ার্স :-)
REA_ANDREW ২

10
একটি getঅংশ সরল করা যেতে পারে:return dateCreated ?? DateTime.Now;
ভেসেভলড ক্রাজনভ

আপনি যদি পোকো হিসাবে আপনার ক্লাস চান তবে এই সমাধানটি সমস্যা হতে পারে। আমার ক্ষেত্রে, আমার ক্লাসটি ডব্লুসিএফের মাধ্যমে স্থানান্তরিত হওয়ার জন্য পোকো ক্লাসের মতো পরিষ্কার হওয়া উচিত।
জ্যাকব

4
@zHs সত্তা ফ্রেমওয়ার্কের সাথে ডেটাবেস প্রথম ব্যবহার করে এটি আমার পক্ষে দুর্দান্ত কাজ করেছে।
জোশুয়া কে 14

4
আপনি যদি এখানে কোনও গুনের জন্য এসে থাকেন তবে দয়া করে এই উত্তরটি দেখুন ।
ঝড় মুলার

60

ডেটটাইম সম্পত্তিটিতে নীচে যুক্ত করুন

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

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

8
.কম্পটেড হল অ্যাড এবং আপডেট ক্রিয়াকলাপ। শুধুমাত্র অ্যাড করার জন্য পরিচয়।
রেনান কোয়েলহো

4
সবচেয়ে ভালো উত্তর দ্বারা পর্যন্ত: এটা যোগ করা উচিত যে System.ComponentModel.DataAnnotations.Schema একটি রেফারেন্স DatabaseGenerated টীকার জন্য যুক্ত করা উচিত
Yazan Khalaileh

কোন সময় অঞ্চল ব্যবহার করা হবে? এটি ইউটিসি হবে?
আলমিস

25

আমি কোন কারণ নিয়ে আসতে পারি না যে কোনও বৈশিষ্ট্যের মাধ্যমে এটি করা সম্ভব না হওয়া উচিত n't এটি মাইক্রোসফ্টের ব্যাকলগে থাকতে পারে। কে জানে.

আমি যে সর্বোত্তম সমাধানটি পেয়েছি তা হ'ল কোডটি প্রথম স্থানান্তরের ক্ষেত্রে ডিফল্টভ্যালু এসকিএল প্যারামিটার ব্যবহার করা।

CreateTable(
    "dbo.SomeTable",
    c => new
        {
            TheDateField = c.DateTime(defaultValueSql: "GETDATE()")
        });

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


4
পরিবর্তনযোগ্য এবং যুক্তযোগ্য যুক্ত যুক্ত ক্ষেত্রে অ্যাডক্লাম ("dbo.table", "তৈরি", সি => সি.ডেটটাইম (nullable: সত্য, ডিফল্টValueSql: "getdate ()")) যোগ করুন;
ইমান

এটি ভাল ধারণা নয়, আপনি যদি আপনার ডিবি চয়ন করেন তবে আপনার এই কোডটির রিফ্যাক্টর দরকার।
লিল

24

আমি এটি EF কোর 2.1 তে পরীক্ষা করেছি

এখানে আপনি কনভেনশন বা ডেটা টিকা ব্যবহার করতে পারবেন না। আপনার অবশ্যই ফ্লুয়েন্ট এপিআই ব্যবহার করতে হবে ।

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Created)
            .HasDefaultValueSql("getdate()");
    }
}

অফিসিয়াল ডক


এটি হ'ল আমি যা চেয়েছিলাম, তবে যেহেতু আমার সম্পত্তি বেসক্লাসে ছিল তাই আমি পারিনি (এটি বেসক্লাসের জন্য একটি নতুন সারণী তৈরি করেছে)। এই লিঙ্কটি ব্যবহার করে চেঞ্জট্র্যাকার পরিদর্শন করা এটি সমাধান করেছে (উভয় তৈরি এবং আপডেট হওয়া টাইমস্ট্যাম্প সেট করা)।
Jeppe

12

এটি সম্ভব এবং বেশ সহজ:

জন্য DateTime.MinValue

[System.ComponentModel.DefaultValue(typeof(DateTime), "")]

DefaultValueAttributeকাঙ্ক্ষিত ডেটটাইম মানটি উপস্থাপন করে এমন স্ট্রিংয়ের শেষ যুক্তি হিসাবে অন্য কোনও মানের জন্য।

এই মানটি অবশ্যই ধ্রুবক প্রকাশ হতে পারে এবং DateTimeব্যবহার করে অবজেক্ট ( ) তৈরি করতে হবে TypeConverter


4
আমি বিশ্বাস করতে চাই যে ব্যবহারটি আমার পক্ষে কাজ করে তবে দুর্ভাগ্যক্রমে এটি হয়নি। অভিবাসনের ফলাফল; defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)
আবদুর রহমান I

খালি স্ট্রিংয়ের পরিবর্তে কেবল একটি স্ট্রিং ডেট ("1/1/20") রাখার চেষ্টা করেছিলেন এবং এটি এটি সফলভাবে রূপান্তর করে।
ব্যবহারকারীর 890332

5

আপনি যদি সত্ত্বা ফ্রেমওয়ার্ক ব্যবহার করছেন তবে একটি সহজ সমাধান হ'ল একটি পার্টিক্যাল ক্লাস যুক্ত করুন এবং সত্তার জন্য কোনও কনস্ট্রাক্টরকে সংজ্ঞায়িত করুন কারণ ফ্রেমওয়ার্কটি কোনও সংজ্ঞা দেয় না। উদাহরণস্বরূপ যদি আপনার কাছে উদাহরণ নামে একটি সত্ত্বা থাকে তবে আপনি নিম্নলিখিত কোডটি পৃথক ফাইলে রাখবেন।

namespace EntityExample
{
    public partial class Example : EntityObject
    {
        public Example()
        {
            // Initialize certain default values here.
            this._DateCreated = DateTime.Now;
        }
    }
}

এটি এখন পর্যন্ত সমস্যার সর্বাধিক মার্জিত (এবং সম্ভবত উদ্দেশ্যযুক্ত) সমাধানও। তবে এটি ধরে নিচ্ছে যে লোকেরা EF কোড প্রথম ব্যবহার করছে।

4
এটি আমি এভাবেই করি, যতক্ষণ না আমি বুঝতে পারি যে আমার সত্তায় কোনও জটিল সম্পত্তি যুক্ত করা ইএফকে একটি ডিফল্ট কনস্ট্রাক্টর তৈরির কারণ হিসাবে ফেলেছে, আমাকে নিজের লেখার কোনও উপায় ছাড়াই ...
ডেভ কাজিনো

5

আমি মনে করি সবচেয়ে সহজ সমাধানটি সেট করা

Created DATETIME2 NOT NULL DEFAULT GETDATE()

কলাম ঘোষণায় এবং ভিএস 2010 এ এনটিটিমোডেল ডিজাইনার সংশ্লিষ্ট কলামের সম্পত্তি স্টোরজেনারেটেড প্যাটার্ন = গণিত সেট করে ।


যদি আমি এটি এর মতো করে করি এবং সম্পত্তিটি অযোগ্য করে তুলি তবে আমি একটি ইডিএমএক্স বৈধতা ত্রুটি পেয়েছি, কারণ একটি নন-অ্যালবামযোগ্য কলাম একটি নোলযোগ্য সম্পত্তিতে ম্যাপ করা হয়েছে।
নিক্লাস পিটার

4

একটি নতুন অ্যাট্রিবিউট শ্রেণি তৈরি করা ভাল পরামর্শ। আমার ক্ষেত্রে, আমি 'ডিফল্ট (ডেটটাইম)' বা 'ডেটটাইম.মিনভ্যালু' নির্দিষ্ট করতে চেয়েছিলাম যাতে নিউটোনসফট.জসন সিরিয়ালাইজার বাস্তব মূল্যবোধ ছাড়াই ডেটটাইম সদস্যদের উপেক্ষা করতে পারে।

[JsonProperty( DefaultValueHandling = DefaultValueHandling.Ignore )]
[DefaultDateTime]
public DateTime EndTime;

public class DefaultDateTimeAttribute : DefaultValueAttribute
{
    public DefaultDateTimeAttribute()
        : base( default( DateTime ) ) { }

    public DefaultDateTimeAttribute( string dateTime )
        : base( DateTime.Parse( dateTime ) ) { }
}

ডিফল্টভ্যালিউ বৈশিষ্ট্য ব্যতীত, জেএসএন সিরিয়ালাইজারটি "1/1/0001 12:00:00 পূর্বাহ্নে" আউটপুট দেয় যদিও ডিফল্টভ্যালুহ্যান্ডলিং gnঅ্যাগোনর বিকল্পটি সেট করা ছিল।


4

কেবল আপনার সত্তা শ্রেণীর নির্মাতায় এর মান নির্ধারণের জন্য বিবেচনা করুন

public class Foo
{
       public DateTime DateCreated { get; set; }
       public Foo()
       {
           DateCreated = DateTime.Now;
       }

}

এটি আমার পক্ষে কাজ করেছে। যদিও এটি করার Datetimeআগে আমাকে সম্পত্তিটি অযোগ্যভাবে সেট করতে হয়েছিল।
আহসান আলম সোজিব

3

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

    [Column(TypeName = "datetime2")]
    [XmlAttribute]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
    [Display(Name = "Date Modified")]
    [DateRange(Min = "1900-01-01", Max = "2999-12-31")]
    public DateTime DateModified {
        get { return dateModified; }
        set { dateModified = value; } 
    }
    private DateTime dateModified = DateTime.Now.ToUniversalTime();

ডেটরেঞ্জএট্রিবিউট টিউটোরিয়ালের জন্য, দুর্দান্ত এই ব্লগ পোস্টটি দেখুন



2

একটি উপায় আছে. এই ক্লাস যুক্ত করুন:

DefaultDateTimeValueAttribute.cs

using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using Custom.Extensions;

namespace Custom.DefaultValueAttributes
{
    /// <summary>
    /// This class's DefaultValue attribute allows the programmer to use DateTime.Now as a default value for a property.
    /// Inspired from https://code.msdn.microsoft.com/A-flexible-Default-Value-11c2db19. 
    /// </summary>
    [AttributeUsage(AttributeTargets.Property)]
    public sealed class DefaultDateTimeValueAttribute : DefaultValueAttribute
    {
        public string DefaultValue { get; set; }
        private object _value;

        public override object Value
        {
            get
            {
                if (_value == null)
                    return _value = GetDefaultValue();

                return _value;
            }
        }

        /// <summary>
        /// Initialized a new instance of this class using the desired DateTime value. A string is expected, because the value must be generated at runtime.
        /// Example of value to pass: Now. This will return the current date and time as a default value. 
        /// Programmer tip: Even if the parameter is passed to the base class, it is not used at all. The property Value is overridden.
        /// </summary>
        /// <param name="defaultValue">Default value to render from an instance of <see cref="DateTime"/></param>
        public DefaultDateTimeValueAttribute(string defaultValue) : base(defaultValue)
        {
            DefaultValue = defaultValue;
        }

        public static DateTime GetDefaultValue(Type objectType, string propertyName)
        {
            var property = objectType.GetProperty(propertyName);
            var attribute = property.GetCustomAttributes(typeof(DefaultDateTimeValueAttribute), false)
                ?.Cast<DefaultDateTimeValueAttribute>()
                ?.FirstOrDefault();

            return attribute.GetDefaultValue();
        }

        private DateTime GetDefaultValue()
        {
            // Resolve a named property of DateTime, like "Now"
            if (this.IsProperty)
            {
                return GetPropertyValue();
            }

            // Resolve a named extension method of DateTime, like "LastOfMonth"
            if (this.IsExtensionMethod)
            {
                return GetExtensionMethodValue();
            }

            // Parse a relative date
            if (this.IsRelativeValue)
            {
                return GetRelativeValue();
            }

            // Parse an absolute date
            return GetAbsoluteValue();
        }

        private bool IsProperty
            => typeof(DateTime).GetProperties()
                .Select(p => p.Name).Contains(this.DefaultValue);

        private bool IsExtensionMethod
            => typeof(DefaultDateTimeValueAttribute).Assembly
                .GetType(typeof(DefaultDateTimeExtensions).FullName)
                .GetMethods()
                .Where(m => m.IsDefined(typeof(ExtensionAttribute), false))
                .Select(p => p.Name).Contains(this.DefaultValue);

        private bool IsRelativeValue
            => this.DefaultValue.Contains(":");

        private DateTime GetPropertyValue()
        {
            var instance = Activator.CreateInstance<DateTime>();
            var value = (DateTime)instance.GetType()
                .GetProperty(this.DefaultValue)
                .GetValue(instance);

            return value;
        }

        private DateTime GetExtensionMethodValue()
        {
            var instance = Activator.CreateInstance<DateTime>();
            var value = (DateTime)typeof(DefaultDateTimeValueAttribute).Assembly
                .GetType(typeof(DefaultDateTimeExtensions).FullName)
                .GetMethod(this.DefaultValue)
                .Invoke(instance, new object[] { DateTime.Now });

            return value;
        }

        private DateTime GetRelativeValue()
        {
            TimeSpan timeSpan;
            if (!TimeSpan.TryParse(this.DefaultValue, out timeSpan))
            {
                return default(DateTime);
            }

            return DateTime.Now.Add(timeSpan);
        }

        private DateTime GetAbsoluteValue()
        {
            DateTime value;
            if (!DateTime.TryParse(this.DefaultValue, out value))
            {
                return default(DateTime);
            }

            return value;
        }
    }
}

ডিফল্টডেটটাইম এক্সটেনশনস সি

using System;

namespace Custom.Extensions
{
    /// <summary>
    /// Inspired from https://code.msdn.microsoft.com/A-flexible-Default-Value-11c2db19. See usage for more information.
    /// </summary>
    public static class DefaultDateTimeExtensions
    {
        public static DateTime FirstOfYear(this DateTime dateTime)
            => new DateTime(dateTime.Year, 1, 1, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond);

        public static DateTime LastOfYear(this DateTime dateTime)
            => new DateTime(dateTime.Year, 12, 31, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond);

        public static DateTime FirstOfMonth(this DateTime dateTime)
            => new DateTime(dateTime.Year, dateTime.Month, 1, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond);

        public static DateTime LastOfMonth(this DateTime dateTime)
            => new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month), dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond);
    }
}

এবং আপনার বৈশিষ্ট্যের জন্য একটি অ্যাট্রিবিউট হিসাবে DefaultDateTimeValue ব্যবহার করুন। আপনার বৈধতা বিশিষ্টতায় ইনপুট করার মান হ'ল "এখন" এর মতো জিনিস, যা চালকের সময়ে একটি অ্যাক্টিভেটর দিয়ে তৈরি ডেটটাইম উদাহরণ থেকে রান সময়ে রেন্ডার হবে। উত্স কোডটি এই থ্রেড থেকে অনুপ্রাণিত: https://code.msdn.microsoft.com/A-flexible-Default-Value-11c2db19 । আমি আমার ক্লাসটি একটি বৈধকরণঅ্যাট্রিবিউটের পরিবর্তে ডিফল্টভ্যালুএট্রিবিউটের সাথে উত্তরাধিকারী করে তুলতে এটিকে পরিবর্তন করেছি।


2

সবেমাত্র এটি অন্যরকম কিছু সন্ধান করতে পাওয়া গেছে, তবে নতুন সি # সংস্করণে আপনি এর জন্য আরও সংক্ষিপ্ত সংস্করণটি ব্যবহার করতে পারেন:

public DateTime DateCreated { get; set; } = DateTime.Now;

দুর্দান্ত উত্তর, ঠিক আমি যা চেয়েছিলাম
Gjaa

এটি কি সর্বদা ব্যবহার করা নিরাপদ?
Jeppe

কোনো অপূর্ণতা মনে করতে পারেন না, সরকারি নথিপত্রে স্বয়ংক্রিয় আরম্ভের সম্পর্কে সামান্য বলছেন docs.microsoft.com/en-us/dotnet/csharp/programming-guide/...
Brandtware

1

আমি একই সমস্যার মুখোমুখি হয়েছি, তবে যে আমার পক্ষে সবচেয়ে ভাল কাজ করে তা নীচে:

public DateTime CreatedOn { get; set; } = DateTime.Now;

0
public DateTime DateCreated
{
   get
   {
      return (this.dateCreated == default(DateTime))
         ? this.dateCreated = DateTime.Now
         : this.dateCreated;
   }

   set { this.dateCreated = value; }
}
private DateTime dateCreated = default(DateTime);

0

এই মুহুর্তে আপনি কীভাবে এর মোকাবিলা করবেন তার উপর নির্ভর করে আপনি কোন মডেলটি লিনক থেকে এসকিউএল বা সত্তা ফ্রেমওয়ার্ক ব্যবহার করছেন?

L2S এ আপনি যুক্ত করতে পারেন

public partial class NWDataContext
{
    partial void InsertCategory(Category instance)
    {
        if(Instance.Date == null)
            Instance.Data = DateTime.Now;

        ExecuteDynamicInsert(instance);
    }
}

EF কিছুটা জটিল , EF ব্যবসায়িক যুক্তি সম্পর্কে আরও তথ্যের জন্য http://msdn.microsoft.com/en-us/library/cc716714.aspx দেখুন।


0

আমি জানি এই পোস্টটি কিছুটা পুরাতন তবে একটি পরামর্শ রয়েছে যা কিছুকে সাহায্য করতে পারে।

অ্যাট্রিবিউট কনস্ট্রাক্টরে কী সেট করতে হবে তা নির্ধারণ করতে আমি একটি এনাম ব্যবহার করেছি।

সম্পত্তি ঘোষণা:

[DbProperty(initialValue: EInitialValue.DateTime_Now)]
public DateTime CreationDate { get; set; }

সম্পত্তি নির্মাতা:

Public Class DbProperty Inherits System.Attribute

    Public Property InitialValue As Object

    Public Sub New(ByVal initialValue As EInitialValue)
       Select Case initialValue
          Case EInitialValue.DateTime_Now
             Me.InitialValue = System.DateTime.Now

          Case EInitialValue.DateTime_Min
             Me.InitialValue = System.DateTime.MinValue

          Case EInitialValue.DateTime_Max
             Me.InitialValue = System.DateTime.MaxValue

       End Select

    End Sub
End Class

এনাম:

Public Enum EInitialValue
   DateTime_Now
   DateTime_Min
   DateTime_Max
End Enum

0

আমি মনে করি আপনি এটি ব্যবহার করে এটি করতে পারেন StoreGeneratedPattern = Identity(মডেল ডিজাইনার বৈশিষ্ট্য উইন্ডোতে সেট করুন)।

এটি কীভাবে করা যায় তা আমি অনুমান করিনি, তবে এটি বের করার চেষ্টা করার সময় আমি লক্ষ্য করেছি যে আমার কিছু তারিখ কলাম ইতিমধ্যে ডিফল্ট ছিল CURRENT_TIMESTAMP()এবং কিছু ছিল না। মডেলটি পরীক্ষা করা হচ্ছে, আমি দেখতে পাচ্ছি যে নামের ব্যতীত দুটি কলামের মধ্যে কেবলমাত্র তফাতটি হ'ল ডিফল্ট মানটি পেয়ে যাওয়াটি StoreGeneratedPatternসেট হয়ে গেছে Identity

আমি আশা করি না যে সেভাবে হবে, তবে বিবরণটি পড়ে এটি একরকম অর্থবোধ করে:

সন্নিবেশ এবং আপডেটের ক্রিয়াকলাপের সময় ডাটাবেসে সংশ্লিষ্ট কলামটি স্বয়ংক্রিয়ভাবে উত্পন্ন হবে কিনা তা নির্ধারণ করে।

এছাড়াও, এটি যখন ডাটাবেস কলামটির "এখন" এর একটি ডিফল্ট মান তৈরি করে, আমি অনুমান করি যে এটি প্রকৃতপক্ষে সম্পত্তিটি DateTime.Nowপোকোতে সেট করে না । এটি আমার পক্ষে কোনও সমস্যা নয় কারণ আমার কাছে একটি কাস্টমাইজড .tt ফাইল রয়েছে যা ইতিমধ্যে আমার সমস্ত তারিখ কলামগুলি DateTime.Nowস্বয়ংক্রিয়ভাবে সেট করে দেয় (টি .ટી.এল ফাইলটি নিজেই সংশোধন করা আসলেই শক্ত নয়, বিশেষত আপনার যদি রিশার্পার থাকে এবং একটি সিনট্যাক্স হাইলাইট হয় তবে প্লাগইন (

আমার জন্য সমস্যাটি ছিল: আমি কীভাবে ডাটাবেস কলামটি একটি ডিফল্ট পেতে পারি যাতে সেই কলামটি বাদ দেওয়া বিদ্যমান অনুসন্ধানগুলি এখনও কাজ করবে? এবং উপরোক্ত সেটিংস এটির জন্য কাজ করেছিল।

আমি এটি এখনও পরীক্ষা করে দেখিনি তবে এটিও সম্ভব যে এটি সেট করার ফলে আপনার নিজস্ব স্বচ্ছ মান নির্ধারণে হস্তক্ষেপ হবে। (আমি কেবল এটিকে প্রথম স্থানে ফেলেছিলাম কারণ EF6 ডেটাবেস প্রথম আমার জন্য এই মডেলটি লিখেছিল))


0

সি # সংস্করণ 6 এ ডিফল্ট মান সরবরাহ করা সম্ভব

public DateTime fieldname { get; set; } = DateTime.Now;

4
স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম: আপনি যদি কোড, এক্সএমএল বা ডেটা নমুনাগুলি পোস্ট করেন তবে অনুগ্রহ করে টেক্সট সম্পাদকের সেই লাইনগুলি হাইলাইট করুন এবং সম্পাদনা সরঞ্জামদণ্ডে "কোড স্যাম্পল" বোতামটি ({}) ক্লিক করুন বা আপনার কীবোর্ডের সিআরটিএল + কে ব্যবহার করে সুন্দর বিন্যাস করুন এবং সিনট্যাক্স এটি হাইলাইট!
হোয়াটপয়েন্টে

4
Brandtware এর উত্তর হিসাবে একই stackoverflow.com/a/47528230/52277
মাইকেল Freidgeim

-1

ইএফ 7 সহ:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Column(TypeName = "datetime2")]
DateTime? Dateadded { get; set; }

মাইগ্রেশন লিপি:

AlterColumn("myschema.mytable", "Dateadded", c => c.DateTime(nullable: false, precision: 7, storeType: "datetime2", defaultValueSql: "getutcdate()"));

ফলাফল:

ALTER TABLE [MySchema].[MyTable] ADD  CONSTRAINT [DF_MySchema.MyTable_Dateadded]  DEFAULT (getutcdate()) FOR [Dateadded]

EF 7 বিদ্যমান নেই, একটি ডেটটাইম কলামটি পরিচয় হতে পারে না এবং টীকাগুলি সেই স্থানান্তর স্ক্রিপ্ট তৈরি করে না। এবং মাইগ্রেশন স্ক্রিপ্টটি ম্যানুয়ালি পরিবর্তন করার দরকার নেই, যদি এটি আপনি বোঝাতে চান। এখানে ইতিমধ্যে যথাযথভাবে উত্তর হিসাবে দেওয়া হয়েছে এমন টীকাগুলি ডিফল্ট যুক্ত করে।
গার্ট আর্নল্ড

-6

আমি এটিও চেয়েছিলাম এবং এই সমাধানটি নিয়ে এসেছি (আমি কেবলমাত্র তারিখের অংশটি ব্যবহার করছি - একটি ডিফল্ট সময় প্রপার্টিগ্রিডের ডিফল্ট হিসাবে কোনও অর্থ দেয় না):

public class DefaultDateAttribute : DefaultValueAttribute {
  public DefaultDateAttribute(short yearoffset)
    : base(DateTime.Now.AddYears(yearoffset).Date) {
  }
}

এটি কেবলমাত্র একটি নতুন বৈশিষ্ট্য তৈরি করে যা আপনি আপনার ডেটটাইম সম্পত্তিটিতে যুক্ত করতে পারেন। উদাহরণস্বরূপ, যদি এটি তারিখটাইমকে ডিফল্ট করে দেয় ow এখন তারিখ:

[DefaultDate(0)]

33
সতর্কতা !!!!!! এটি খুব খারাপ এবং এসও থেকে অপসারণ করা উচিত। এই পরামর্শের ফলে আমি কেবল ডিবাগিংয়ের ঘন্টাগুলি ব্যয় করেছি। প্রথম নজরে, এটি দেখতে দুর্দান্ত দেখাচ্ছে এবং কাজ করছেন বলে মনে হচ্ছে। তবে এটি একটি ফাঁদ। বৈশিষ্ট্যগুলির একটি কারণে স্থির মান প্রয়োজন। সেগুলি একবার শুরু করা হয়। এর পরে, মান পরিবর্তন হয়। সুতরাং আপনার তৈরি প্রথম উদাহরণটি সূক্ষ্ম দেখাবে এবং পরবর্তী উদাহরণগুলি সূক্ষ্ম দেখাবে, এগুলি আসলে প্রথম মানটি ব্যবহার করে। আপনার অ্যাপ্লিকেশনটি কিছুক্ষণ চলার পরে, আপনি সমস্যাটি লক্ষ্য করবেন এবং কেন তা ভাববেন। এবং ডিবাগ-এ, আপনি যখন এটি এক মিনিটের জন্য চালান, এটি ঠিকঠাক চলবে। সাবধান!
ক্রিস হাইনেস 6:36

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