Моя команда и я создаем мобильное приложение в Xamarin Forms, чтобы позволить нашим клиентам иметь элементарный доступ к своим данным через мобильный телефон. Мы используем zumero для создания локальной sqlite-копии базы данных сервера ms sql. Чтобы заставить Entity Framework Core работать на устройстве, я создал модели и контекст путем обратного инжиниринга из файла sqlite, через который синхронизировался zumero.
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");
//...
Для следующего этапа разработки я добавил проект WinForms в решение Visual Studio и попытался создать действительно простое приложение, аналогичное функциональности мобильного приложения, и Я хотел иметь возможность повторно использовать модель данных, если это возможно.
Сначала я ошибочно подумал, что могу просто переопределить одну строку кода:
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, и использовать ее для создания файла SQLite, а тип столбца был datetime
.
Я также пытался использовать protected override void OnModelCreating(ModelBuilder modelBuilder)
от SQL сервера обратного инженера, и это выдало следующее сообщение об ошибке: "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 и / или мою модель данных так, чтобы они могли работать вместе?
Как программист-самоучка, я действительно новичок ко всему этому, так что любая помощь очень ценится! Спасибо !!