首页 > 解决方案 > c#,是否可以定义从 sqlite 数据库到 c# 对象类型保存的数据绑定?

问题描述

我有以下班级层次结构:

public class A
{
   public string A_string;
   public int A_int;
   public double A_double;
   public B BInstance;
}

public class B
{
   public string B_string;
   public int B_int;
   public double B_double;
   public C CInstance;
}

public class C
{
   public string C_string;
   public int C_int;
   public double C_double;
}

并且需要映射到以下数据库值:

+--------------+-----------+--------------+---------------------+-------------------+----------------------+--------------------------------+-----+---------------------+
| Col1(string) | Col2(int) | Col3(double) | Col4(string)        | Col5(int)         | Col6(double)         | Col7(string)                   | ... | Col_without_mapping |
+--------------+-----------+--------------+---------------------+-------------------+----------------------+--------------------------------+-----+---------------------+
| A_string     | A_int     | A_double     | A.Instance.B_string | A.BInstance.B_int | A.BInstance.B_double | A.BInstance.CInstance.C_string | ... |                     |
+--------------+-----------+--------------+---------------------+-------------------+----------------------+--------------------------------+-----+---------------------+

数据库有数千列,并且类层次结构非常复杂,因此我不想为访问数据库的每个函数重写映射(以及数据类型转换(从数据库到 c#,反之亦然))。理想情况下,如果可能,我想定义一次数据绑定。

我知道实体框架,但只有选项:

  1. 先编码
  2. 数据库优先

我需要的是现有代码到现有数据库的数据绑定。

我读到了Fluent API

也许这样的事情会起作用:

modelBuilder.ComplexType<A>();
modelBuilder.ComplexType<B>();
modelBuilder.ComplexType<C>();

modelBuilder.Entity<A>().ToTable("databasetable_above"); 
modelBuilder.Entity<B>().ToTable("databasetable_above");
modelBuilder.Entity<C>().ToTable("databasetable_above");

但我不知道这是否可能。如果是这样,我会很高兴显示映射的代码片段。或者,如果有人有更好的想法,我会很高兴听到。

编辑:

有谁知道代码,如果我可以用 Fluent API 生成的数据库替换数据库。

谢谢

标签: c#entity-frameworksqliteef-fluent-api

解决方案


推荐阅读