所以这是我的binding
类型:
public class ClipboardItem : INotifyPropertyChanged
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
private int id { get; set; }
private string text;
private string name;
private string processName;
private string time;
public ClipboardItem(int id, string text, string name, string processName, string time, bool isPinned)
{
this.id = id;
this.text = text;
this.name = "";
this.processName = processName;
this.time = time;
}
}
DbContext
public class ClipboardItemContext : DbContext
{
public DbSet<ClipboardItem> Clipboards { get; set; }
public string DbPath { get; }
public ClipboardItemContext()
{
var folder = Environment.SpecialFolder.LocalApplicationData;
var path = Environment.GetFolderPath(folder);
DbPath = System.IO.Path.Join(path, "clipboards.db");
Database.EnsureCreated();
}
// The following configures EF to create a Sqlite database file in the
// special "local" folder for your platform.
protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlite($"Data Source={DbPath}");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ClipboardItem>().HasKey(p => new { p.Id });
}
}
所以这很好,我可以从我的DB
中add
、read
、update
和delete
项。
现在我想在我的binding type
:中添加新字段
private bool isPinned;
我的Ctor
public ClipboardItem(int id, string text, string name, string processName, string time, bool isPinned)
{
this.id = id;
this.text = text;
this.name = "";
this.processName = processName;
this.time = time;
this.isPinned= isPinned;
Properties.Settings.Default.ItemIndex++;
}
在再次运行我的应用程序之前,我删除了我的.db
文件,因为这个新字段,当我尝试启动应用程序时,我得到了这个exception
:
System.InvalidOperationException:'未找到合适的构造函数对于实体类型"ClipboardItem"。以下构造函数无法绑定到实体类型的属性的参数:无法绑定ClipboardItem中的"isPinned"(int id,string text,stringname,string processName,string time,bool is Pined('。'
我的DB
似乎不接受这个新字段,我也尝试添加不同的type
,例如int
或string
,但我再次收到相同的错误。
当我删除这个新字段时,我创建了.db
并运行了application
。
Sqlite没有单独的布尔存储类。相反布尔值存储为整数0(假(和1(真(
只需将您的字段映射到整数,
[Column(TypeName = "INTEGER")]
public bool isPinned;
或者你可以用OnModelCreating
来做,
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ClipboardItem>().HasKey(p => new { p.Id });
modelBuilder.Entity<ClipboardItem>().Property(p => p.isPinned)
.HasConversion(x => x ? 1 : 0,
x => (x == 1));
}