Неуспешни стойности по подразбиране в SQL Server 2014 с помощта на DbContext

SQL Server 2014 има неочаквано поведение, ако дефинирате таблица със стойност по подразбиране, да кажем int като 6, след това се опитате да въведете някои колони, които не са по подразбиране, SSMS отговаря със съобщение, че редът е въведен, но може да не се чете обратно и ви инструктира да завършите операцията, като стартирате изпълнение на заявка, която не се показва. След това операцията е завършена. Така че не е труден провал. Въпреки това, на по-високо ниво на абстракция, извършването на 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