我和我的团队正在 Xamarin Forms 中构建一个移动应用程序,以允许我们的客户通过移动设备对他们的数据进行一些基本的访问。我们正在使用 zumero 来处理创建 ms sql server 数据库的本地 sqlite 副本。为了让 Entity Framework Core 在设备上工作,我通过对 zumero 同步的 sqlite 文件进行逆向工程来创建模型和上下文。
public partial class tblEmployeeSchedule : BaseModel, ICrewMember
{
//...
public string DtDate { get; set; }
public class EFDatabase : IDataStore
{
public DataContext Context { get; set; }
public EFDatabase(string filepath)
{
try
{
this.Context = new DataContext(filepath);
public partial class DataContext : DbContext
{
public string ConnString { get; private set; }
public DataContext(string filepath)
{
this.ConnString = filepath;
}
//...
public virtual DbSet<tblEmployeeSchedule> tblEmployeeSchedule { get; set; }
//...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//...
modelBuilder.Entity<tblEmployeeSchedule>(entity =>
{
entity.HasKey(e => e.Oid);
entity.Property(e => e.DtDate).HasColumnName("dt_date");
//...
对于下一阶段的开发,我在 Visual Studio 解决方案中添加了一个 WinForms 项目,并尝试创建一个与移动应用程序具有相似功能的非常简单的应用程序,并且我希望能够在可能的情况下重用数据模型。
起初,我错误地认为我可以简单地覆盖一行代码:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlite($"Data Source={ConnString}");
通过用这个替换它:
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer(ConnString);
var connString = $"Server={server}; Database={db}; User Id={username}; Password={password};";
Program.Database = new SqlServerDatabase(connString);
但是当我尝试运行该程序时,它抛出了以下错误:
InvalidCastException
Message: "Specified cast is not valid."
Source: "Microsoft.Data.SqlClient"
我猜测错误来自数据模型不匹配。当 Zumero 通过信息同步时,它text
在 SQLite 文件中创建了一个类型列。我尝试使用直接从 SQL Server 逆向工程的数据模型,并使用它来创建 SQLite 文件,列类型为datetime
.
我还尝试使用protected override void OnModelCreating(ModelBuilder modelBuilder)
SQL Server 逆向工程师提供的,这给出了以下错误消息:"The property 'tblCrewSchedule.DtDate' is of type 'string' which is not supported by current database provider. Either change the property CLR type or ignore the property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'."
我一直在想办法构建一个双方都可以使用的代码优先数据模型,但我想不出一个解决方案。我想也许如果 Zumero 知道一种方法,我可以创建一个模型,该属性是DateTime
C# 中的类型,即使 Zumero 正在创建一个类型的 SQLite 列text
,也许这将是一个可能的解决方案路径?无论如何,如果可能的话,我想找到一种方法来为两个项目使用相同的数据模型。
有没有办法安排 Zumero、Sql Server 和/或我的数据模型,以便它们可以一起工作?
作为一名自学成才的程序员,我对这一切都很陌生,因此非常感谢任何和所有帮助!谢谢!!