1

Тема: c# и default value в sql

Доброго вечора форумчани, виникло таке питання, в БД є constraint c DF рівне, наприклад, 10(Default Value) в колонці TestValue(int, not null), як мені закомітити запит, щоби при TestValue < 1 використовувалось Default Value, яке забите в БД?

 

           var role = new Test() {
                TestName = name,
                TestValue = testValue
            };

2

Re: c# и default value в sql

Під "закомітити" що ви мали на увазі? Зробити вибірку?

private void life(int time_of_sleep=min, ...)
Cogito, ergo sum.

3

Re: c# и default value в sql

Skyzerks Synx написав:

Під "закомітити" що ви мали на увазі? Зробити вибірку?

в entity framework commit() тобто добавити записи

4

Re: c# и default value в sql

Я не знайшов як це можна зробити нормально, виглядає так що не можна отримати значення за замовчуванням яке записане в базі даних, ось код який робить приблизно те що ви хочете.

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new MD())
            {
                context.Ens.ToList().ForEach(x => context.Ens.Remove(x));
                context.SaveChanges();
                var en = new En() { TestName = "qq" };
                var en2 = new En() {TestValue = 2};
                var en3 = new En() {TestValue = -2};
                context.Ens.Add(en);
                context.Ens.Add(en2);
                context.Ens.Add(en3);
                context.SaveChanges();
                var items = context.Ens.ToList();
            }
        }
    }

    public class En
    {

        public En()
        {
            TestValue = _defaultTestValue;
        }
        private const int _defaultTestValue = 10;
        private int _testValue;

        public int ID { get; set; }
        public string TestName { get; set; }
        public int TestValue
        {
            get { return _testValue; }
            set
            {
                _testValue = value < 0 ? _defaultTestValue :
                    value;
            }
        }
    }

    public class MD : DbContext
    {
        public virtual DbSet<En> Ens { get; set; }
    }
}
Подякували: juflet1

5

Re: c# и default value в sql

truesupport написав:

Я не знайшов як це можна зробити нормально, виглядає так що не можна отримати значення за замовчуванням яке записане в базі даних, ось код який робить приблизно те що ви хочете.

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new MD())
            {
                context.Ens.ToList().ForEach(x => context.Ens.Remove(x));
                context.SaveChanges();
                var en = new En() { TestName = "qq" };
                var en2 = new En() {TestValue = 2};
                var en3 = new En() {TestValue = -2};
                context.Ens.Add(en);
                context.Ens.Add(en2);
                context.Ens.Add(en3);
                context.SaveChanges();
                var items = context.Ens.ToList();
            }
        }
    }

    public class En
    {

        public En()
        {
            TestValue = _defaultTestValue;
        }
        private const int _defaultTestValue = 10;
        private int _testValue;

        public int ID { get; set; }
        public string TestName { get; set; }
        public int TestValue
        {
            get { return _testValue; }
            set
            {
                _testValue = value < 0 ? _defaultTestValue :
                    value;
            }
        }
    }

    public class MD : DbContext
    {
        public virtual DbSet<En> Ens { get; set; }
    }
}

Дякую. При пошуках знайшов, що дана фіча буде добавлена в наступних версіях entity framework, поки можливості використання дефолтних значень з БД не має

6

Re: c# и default value в sql

Думаю, тут краще це зробити безпосередньо на БД через тригер, не думаю що там будуть якісь проблеми.