【发布时间】:2014-10-02 19:34:19
【问题描述】:
我在 windows phone 7.1 中有一个应用程序,本地数据库 sdf 在隔离文件中。 现在在我当前的版本中,我有一张桌子:
[Table]
public class Employee
{
[Column(IsPrimaryKey = true)]
public string EmployeeFile
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeName
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeByte
{
get;
set;
}
}
在应用程序的下一个版本中,我想再添加两列,如下所示:
[Table]
public class Employee
{
[Column(IsPrimaryKey = true)]
public string EmployeeFile
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeName
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeType
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeExtn
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeByte
{
get;
set;
}
}
然后,如果我更改表的代码,应用程序会在进行查询时崩溃。 如果数据库中不存在这两列,如何添加?
我尝试了这段代码来更新我的数据库:
using (Connection Empdb = new Connection(constant.strConnectionString))
{
if (Empdb.DatabaseExists())
{
DatabaseSchemaUpdater dbUpdater = Empdb.CreateDatabaseSchemaUpdater();
// Add the column
try { dbUpdater.AddColumn<string>("EmployeeFile"); dbUpdater.Execute(); }
catch { /* Nothing */ }
try { dbUpdater.AddColumn<string>("EmployeeName"); dbUpdater.Execute(); }
catch { /* Nothing */ }
try { dbUpdater.AddColumn<string>("EmployeeType"); dbUpdater.Execute(); }
catch { /* Nothing */ }
try { dbUpdater.AddColumn<string>("EmployeeExtn"); dbUpdater.Execute(); }
catch { /* Nothing */ }
try { dbUpdater.AddColumn<string>("EmployeeByte"); dbUpdater.Execute(); }
catch { /* Nothing */ }
}
}
每一列都会被这段代码捕获,这段代码是否正确以及该列将添加到哪个表中? 该列将添加到哪个表中?
【问题讨论】:
-
当您的应用程序崩溃时,它会因为异常而崩溃。你可以捕捉到那个异常,它会告诉你哪里出了问题。没有这些信息,你只是在猜测。别猜了。
-
使用独立的工具浏览器并检查是否根据您的要求生成了数据库。您可以使用 sdf explorer 来检查数据库
-
我的代码没有问题。但是您没有正确复制代码。在
<>内部应该有Table名称而不是column的类型
标签: c# database windows-phone-7 multiple-columns