首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows Phone SQL Server CE -检索基础数据库架构以进行升级

Windows Phone SQL Server CE -检索基础数据库架构以进行升级
EN

Stack Overflow用户
提问于 2012-06-12 20:43:03
回答 2查看 743关注 0票数 3

Windows Phone 7.1支持SQL Server CE和LINQ to SQL,以及通过DatabaseSchemaUpdater升级数据库。

在其他平台上,我会读取数据库模式表(例如sys.objects)来查看当前的模式,并找出哪些表/列需要升级。

鉴于Windows Phone上不允许直接SQL访问,如何检索当前的数据库架构?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-12 20:43:03

SQL Server CE仍然包括INFORMATION_SCHEMA.TABLESINFORMATION_SCHEMA.COLUMNS表,但是访问它们有点麻烦,因为不允许直接访问SQL。

但是,您可以创建一个映射到这些表的DataContext

代码语言:javascript
复制
public class SchemaContext : DataContext
{
    public SchemaContext()
        : base("Data Source=isostore:/Database.sdf")
    {
        if (!this.DatabaseExists())
        {
            throw new InvalidOperationException("Cannot use the SchemaContext on a database which doesn't exist");
        }
    }

    public Table<Table> Tables;
    public Table<Column> Columns;

    [Table(Name = "INFORMATION_SCHEMA.Columns")]
    public class Column
    {
        [Column(Name = "TABLE_NAME")]
        public string TableName { get; set; }

        [Column(Name = "COLUMN_NAME")]
        public string Name { get; set; }

        [Column(Name = "DATA_TYPE")]
        public string DataType { get; set; }

        [Column(Name = "ORDINAL_POSITION")]
        public int OrdinalPosition { get; set; }

        [Column(Name = "IS_NULLABLE")]
        public string IsNullableString { get; set; }

        public bool IsNullable
        {
            get { return this.IsNullableString == "YES"; }
            set { this.IsNullableString = value ? "YES" : "NO"; }
        }

    }

    [Table(Name = "INFORMATION_SCHEMA.Tables")]
    public class Table
    {
        [Column(Name = "TABLE_NAME")]
        public string Name { get; set; }

        [Column(Name = "TABLE_TYPE")]
        public string Type { get; set; }
    }
}

然后,您可以使用以下代码读取该架构:

代码语言:javascript
复制
using (var schemaContext = new SchemaContext())
{
    foreach (var table in schemaContext.Tables)
    {

    }
}

为这些表创建单独的上下文非常重要,否则DataContext.CreateDatabase调用将尝试创建这些架构表,这将失败。

票数 1
EN

Stack Overflow用户

发布于 2012-06-13 03:43:00

有一个Walkthrough for Updating a Local Database Application for Windows Phone on MSDN提倡在DatabaseSchemaUpdater上使用DatabaseSchemaVersion -即:

代码语言:javascript
复制
// Set the new database version.
DatabaseSchemaUpdater dbUpdater = db.CreateDatabaseSchemaUpdater();
dbUpdater.DatabaseSchemaVersion = APP_VERSION;
dbUpdater.Execute();

您可以查询版本并添加您在每个发行版中添加的位,而不必担心当前的模式(毕竟,只要您记得保持版本号正确更新,这将是一个已知的配置)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10996895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档