【问题标题】:Is there a way to immediately populate an object property from associated ID field when instancing an object from the DB?从数据库实例化对象时,有没有办法立即从关联的 ID 字段填充对象属性?
【发布时间】:2020-08-09 05:56:39
【问题描述】:

假设我的 SQLite 数据库中有两个表,PersonStudent

Person 具有 IdName 列。 Student 具有 IdPersonId 列。 PersonId 显然链接到 Person 表中的 ID 列。

所以在我的应用中,我为这些表中的每一个都设置了一个类,PersonStudent

学生班将具有以下属性:

public class Student
{
Int Id { get; set; };  
Int PersonId { get; set; };  
Person person { get; set; };  
}

然后我有我的 SQLite 连接来从数据库中获取我的数据:

SQLiteConnection con = new SQLiteConnection(DBLocation);
var students = con.Table<Student>().ToList();

这将填充每个对象的“Int Id”和“Int PersonId”属性,但不会填充“Person person”属性。

我的问题是,有没有办法同时为这个属性(Person person)分配其各自的值(一个 Id == Student.PersonId 的 Person 对象)?或者这样做的最佳做法是什么?

谢谢

【问题讨论】:

    标签: c# sqlite sqlite-net


    【解决方案1】:

    如果你使用像EntityFrameworkCore这样的ORM,你可以做到这一点。 学生班级:

    public class Student
    {
    Int Id { get; set; };  
    Int PersonId { get; set; };  
    Person person { get; set; };  
    }
    

    人物类:

    public class Person
    {
    Int Id { get; set; };
    Student Student { get; set; };  
    }
    

    然后通过使用它:

    var person = new Person
    {
      Id = 1,
      Student = new Student
      {
        Id = 1
      }
    }
    
    dbContext.Persons.Add(person);
    dbContext.SaveChanges();
    

    在使用代码之前需要做一些配置,比如创建代表内存中数据库的 DbContext 子类等。你可以在这里学习 EF Core:https://docs.microsoft.com/en-us/ef/core/get-started/?tabs=netcore-cli

    【讨论】:

    • 我已经可以用 SQLite 做到这一点。目前我正在属性的 Get 方法中执行此操作,例如 return con.Get&lt;Person&gt;(PersonId)。我想知道是否有更直接或更简单的方法来做到这一点。
    • 我向您展示的这种方式与插入相关项目有关。获取相关项目,您可以:dbContext.Persons.Include(p =&gt; p.Student).SingleOrDefault(p =&gt; p.Id == PersonId).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多