LinqPad + EF 4.1 + SQL Server CE - PullRequest
       19

LinqPad + EF 4.1 + SQL Server CE

2 голосов
/ 04 января 2012

Я уже пару дней играю с этой идеей, но не могу найти убедительных доказательств того, что это сработает или не сработает.

Я хочу использовать запросы LinqPadсоздать базу данных EF 4.1 с первым кодом с поддержкой SQL Server CE в том же каталоге, что и запрос (возможно, с тем же именем, что и запрос).Причиной этого было бы быстрое создание базы данных для хранения результатов запроса для дальнейшей обработки.

Идея состоит в том, чтобы сохранить определения классов в запросе, т. Е. (Они будут работать с последней бета

public class User
{
    public long Id { get; set; }
    public string Name{ get; set; }
}

public class MyDBContext : DbContext
{
    // note the overloaded constructor
    // just pass in the LinqPad UserQuery connection
    public MyDBContext(DbConnection connection) : base(connection, true)
    {}
    public DbSet<User> Users { get; set; }
}

Затем в запросе:

#define NONEST
public Main()
{
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDBContext>());
    // pass in the current database connection to point EF to the right database
    var context = new MyDBContext(this.Connection);
    context.Users.Add(new User(){Name = "Test User"});
    context.SaveChanges();

    context.Users.Dump("Contents of Users table");
}

Я ссылался на EntityFramework 4.2.0.0 в LinqPad, но в своем запросе я не вижу пространства имен System.Data.Entity. Это свидетельствует о какой-то другой проблеме?

Я не уверен, чтоЕсли у вас достаточно контекста или информации, дайте мне знать, если вам нужны пояснения. Можно ли это сделать? LinqPad пока не поддерживает это?

Обновление:

Похоже, EF не может отобразить вложенноеклассы, что в точности соответствует классу, определенному в запросе LinqPad. Я не очень разбираюсь в этом контексте, но кажется, что я зашел в тупик. Если Джо Албахари не сможет каким-то образом реализовать не вложенные пользовательские классы, это не так.Похоже, это будет работать. У кого-нибудь есть идеи?

Окончательное обновление:

При использовании последней бета-версии это полностью работает. Требуется создатьфайл базы данных .sdf заранее, но не всеее операции должны работать.Очень круто.Спасибо Джо Албахари!

1 Ответ

3 голосов
/ 05 января 2012

Загрузите последнюю бета-версию , а затем добавьте следующую директиву в начало вашего запроса:

#define NONEST

Это сообщит LINQPad о перемещении типов, которые вы определяете на уровень выше, поэтомучто они не являются вложенными.

...