2012-11-07 1 views
0

я был тест, который выглядит следующим образом:Что-нибудь странное о датах в Entity Framework Linq-запросах?

[TestMethod] 
public void Things_can_be_saved() 
{ 
    var ts = DateTime.Now; 
    var thing = new Thing() 
    { 
     Name = "Some name", 
     TimeStamp = ts 
    }; 

    // save it 
    var context = new MyDataContext(testDb); 
    context.Things.Add(thing); 
    context.SaveChanges(); 

    // pull from a fresh context so we know it's a db pull not cached 
    var context2 = new MyDataContext(testDb); 
    var fetched = context2.Things.FirstOrDefault(t => t.TimeStamp == ts); 

    Assert.AreEqual(thing.Name, fetched.Name); 
} 

Так что, когда я запускаю это, я могу посмотреть в БД и увидеть «вещь», присутствующий в дб. Я вижу, что сохраненный столбец Timestamp для него равен значению переменной ts во время выполнения. Но «fetched» имеет значение NULL, что указывает на то, что EF не может найти его в запросе FirstOrDefault. Есть ли что-то, что мне не хватает в равенстве DateTime?

+0

Что тип столбца в базе данных? Кроме того, если вы используете дизайнер EDMX, можете ли вы проверить, что такое * StoreGenerationPattern * для свойства 'TimeStamp' ??? – fernandoespinosa

+0

Возможно, вам нужно изменить свой столбец в базе данных, чтобы быть datetime2, а не datetime. – Pawel

+0

Это все код, извините, если это было непонятно, когда я задал вопрос. – Paul

ответ

2

Вы, вероятно, нужно изменить столбец в базе данных, чтобы быть Datetime2 вместо DateTime

Также см эту тему: DateTime2 vs DateTime in SQL Server

+0

работал отлично, спасибо. – Paul

+0

+1 но не лучший ли ответ, если он связан с http://stackoverflow.com/questions/1334143/sql-server-datetime2-vs-datetime? –

+0

Не стесняйтесь редактировать его - stackoverflow о хорошем ответе, поэтому, если вы можете улучшить - пойдите для него. Я просто не знал о другом потоке. – Pawel

 Смежные вопросы

  • Нет связанных вопросов^_^