Значения по умолчанию не работают в SQL Server 2014 с использованием DbContext

SQL Server 2014 имеет неожиданное поведение: если вы определяете таблицу со значением по умолчанию, скажем, int, например 6, а затем пытаетесь ввести некоторые нестандартные столбцы, SSMS отвечает сообщением о том, что строка была введена, но не может t будет прочитан и предлагает вам завершить операцию, запустив выполнение запроса, который не отображается. Затем операция завершается. Так что это не серьезный провал. Однако на более высоком уровне абстракции выполнение SaveChanges() не приводит к ошибке, а записывает ноль в столбец по умолчанию.

Вот тестовая таблица

CREATE TABLE [dbo].[TestDefaultInsert]
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [ColumnWithDefault] INT NOT NULL DEFAULT ((6)), 
    [ColumWithUserdata] NVARCHAR(50) NOT NULL
)

Вот тестовая программа:

class Program
{
    static void Main(string[] args)
    {
        using (var insertDbContext = new TestDefaultInsertionEntities())
        {
            var testDefaultInserts = insertDbContext.TestDefaultInserts;
            TestDefaultInsert di = new TestDefaultInsert();
            di.ColumWithUserdata = "SimpleData";
            //di.ColumnWithDefault = 8;     // zeros are inserted 
                                            // instead of the default value of 6
                                            // 8 inserted correctly 
                                            // when this line is uncommented. 
            insertDbContext.TestDefaultInserts.Add(di);
            insertDbContext.SaveChanges();

            foreach( var t in testDefaultInserts)
            {
                Console.WriteLine(t.ColumnWithDefault);
            }

            Console.ReadLine();
        }
    }
}

person user3594395    schedule 07.08.2015    source источник


Ответы (1)


Вы должны сопоставить свой столбец ColumnWithDefault как Computed.

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public string ColumnWithDefault{ get; set; }

OR

this.Property(t => t.ColumnWithDefault)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
person Backs    schedule 07.08.2015