Использование LINQ to SQL для создания базы данных - PullRequest
5 голосов
/ 08 июня 2011

Я могу использовать LINQ для создания базы данных с некоторыми составными таблицами, используя datacontext.createDatabase (). Проблема заключается в том, что каждый раз, когда я хочу добавить новую таблицу в базу данных и использовать этот метод, мне нужно сначала удалить базу данных, а затем заново создать всю базу данных с дополнительной таблицей. Это, очевидно, закрывает все содержимое, которым я ранее заполнил таблицы.

Можно ли просто добавить новую таблицу в базу данных, не создавая ее каждый раз с нуля?

Ответы [ 3 ]

4 голосов
/ 08 июня 2011

Я вижу два способа сделать это

первый

Вы можете использовать ExceuteCommand -метод DataContext для запуска некоторых операторов T-SQL для создания таблиц.

и второй

вы можете использовать эту хак-функцию, если у вас есть тип таблицы, как предложено здесь

public void CreateTable(Type linqTableClass)
{
    using (var tempDc = new DmsDataContext())
    {
        var metaTable = tempDc.Mapping.GetTable(linqTableClass);
        var typeName = "System.Data.Linq.SqlClient.SqlBuilder";
        var type = typeof(DataContext).Assembly.GetType(typeName);
        var bf = BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod;
        var sql = type.InvokeMember("GetCreateTableCommand", bf, null, null, new[] { metaTable });
        var sqlAsString = sql.ToString();
        tempDc.ExecuteCommand(sqlAsString);
    }
}
1 голос
/ 05 августа 2011

Прикрепленный код создает базу данных dynamicDatabase11 и таблицу books.

public class MyDatabse : DataContext
{
    public Table<Bookss> Bookss;
    public MyDatabse(string connection) : base(connection) { }
}

[Table(Name = "Books")]
public class Bookss
{
    [Column(IsPrimaryKey = true)]
    public string Title;
    [Column]
    public string Rating;
}
class Program
{
    static void Main(string[] args)
    {
        CreateDatabase("DynamicDatabase11");
    }
    public static void CreateDatabase(string Dbname )
    {

        MyDatabse db = new MyDatabse("ConString"+Dbname+"");
        db.CreateDatabase();
    }
}
0 голосов
/ 08 июня 2011

Нет, в данный момент такая функция недоступна.

Даже в EF4 - по крайней мере, не сейчас ... эти биты здесь ( Code-First Database Evolution ) не попали в финальную версию EF 4.1 ....: - (

Я слышал, что команды Microsoft усердно работают над решением (EF "Migrations") - но оно все еще работает над

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...