Почему datetime не позволяет загружать свойство навигации?

Я использую Entity Framework 4.3.1, используя подход DbContext POCO к базе данных SQL Server 2012.

У меня в базе всего две таблицы и выглядят они вот так:

tables

ПРИМЕЧАНИЕ. :В базе данных вообще не указаны внешние ключи. -Я только применяю связь в модели. (Я не могу изменить базу данных ).

В каждом из них есть одна строка данных, которая выглядит следующим образом:

data

Я выполнил следующий запрос, чтобы убедиться, что соединение работает:

validation

Теперь,У меня есть следующие объекты:

public class Two
{
    public long TwoId { get; set; }
    public string OneId { get; set; }
    public virtual One One { get; set; }
}

public class One
{
    public string OneId { get; set; }
    public DateTime DeliveryDate { get; set; }
    public virtual ICollection<Two> Twos { get; private set; }

    public void AddTwo(Two two)
    {
        if (two == null)
            throw new ArgumentNullException("two");

        if (Twos == null)
            Twos = new List<Two>();

        if (!Twos.Contains(two))
            Twos.Add(two);

        two.One = this;
    }
}

И это контекст:

public class TestContext : DbContext
{
    public TestContext(string conectionString)
        : base(conectionString)
    {
        Configuration.LazyLoadingEnabled = true;
        Ones = Set<One>();
        Twos = Set<Two>();
    }
    public DbSet<One> Ones { get; private set; }
    public DbSet<Two> Twos { get; private set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        var one = modelBuilder.Entity<One>();
        one.ToTable("One");
        one.HasKey(d => d.OneId);

        var two = modelBuilder.Entity<Two>();
        two.ToTable("Two");
        two.HasKey(d => new
                            {
                                d.OneId,
                                d.TwoId
                            });
        two.Property(p => p.TwoId)
           .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        two.HasRequired(t => t.One)
           .WithMany(o => o.Twos)
           .HasForeignKey(o => o.OneId);
        base.OnModelCreating(modelBuilder);
    }
}

Когда я запускаю этот фрагмент кода, я получаю Why is this printed?, напечатанный на моей консоли -, чего я не ожидаю, поскольку вы можете видеть, что свойство навигации должно быть заполнено в (, я даже явно включил его):

using (var ctx = new TestContext(@"......"))
{
    const string oneId = "111348718";
    var one = ctx.Ones.Single(o => o.OneId.Equals(oneId));

    if (one != null)
    {
        var sdi = ctx
           .Twos
           .Include(s => s.One)
           .Single(s => s.OneId.Equals(oneId));

        if (sdi.One == null)
        {
            Console.WriteLine("Why is this printed?");
        }
        else
        {
            Console.WriteLine("This is what I expect");
        }
    }
}

Теперь, это действительно странный бит:Если я просто закомментирую свойство DeliveryDateиз класса One, оно будет работать нормально (Я выведу This is what I expectна консоль ).

Что здесь не так и как я могу это решить?

ПРИМЕЧАНИЕ. :Если я посмотрю на свойство DeliveryDateв переменной one, оно будет правильно установлено на ожидаемое значение, поэтому дата в базе данных должна быть в порядке, и инфраструктура сущностей вполне способна материализовать ее.

Дополнительная информация:Тот факт, что это дата, не имеет значения -, если это так, скажем, nvarchar, он все равно терпит неудачу -кажется, что любое простое свойство приводит к тому, что все это падает -мне это кажется ошибкой...

7
задан kmp 2 August 2012 в 13:29
поделиться