SQLite数据库中是否有对模型类的要求?

时间:2017-01-31 15:37:25

标签: c# database linq sqlite uwp

我在UWP上使用LINQ to SQLite编写代码。

据我所知,模型是数据库中表行的模板。关于SQLite的文档几乎没有提到模型的限制,或者如何将模型转换为表行。示例代码通常只提供具有主要类型的简单案例。

我的问题是:

  1. 数据库模型类和普通类之间是否存在任何差异。我发现至少在this example(顺便说一句,这是一个很好的),
  2.   

    模型类成员使用属性进行修饰以指示键。

    internal class Person
    {
        /// <summary>
        /// Gets or sets the identifier.
        /// </summary>
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        ....
    }
    

    这个属性是否必需?还有其他类似的技巧吗?

    1. 如果模型类和普通类之间存在任何一般差异,SQLite是否需要它或LINQ是否需要它?

    2. 复杂数据如何存储在数据库中,例如模型类中的List<>。属性是作为方法还是作为字段处理,属性是否在表中使用了一列?

1 个答案:

答案 0 :(得分:2)

  1. 唯一的区别是您在数据库上设置了一些属性     因此SQLite会知道哪个是主键,哪个是哪个字段     应该被忽略,等等。但你可以从任何部分重用该类     的代码。你甚至可以拥有一个使用的模型     数据库和用于数据绑定的UI,但不建议这样做。
  2. LINQ不需要任何属性,它们仅由SQLite使用。
  3. 用于存储列表&lt;&gt;您可以使用SQLite Extensions
  4. 这是他们网站的一个例子:

    public class Stock
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        [MaxLength(8)]
        public string Symbol { get; set; }
    
        [OneToMany(CascadeOperations = CascadeOperation.All)]      // One to many relationship with Valuation
        public List<Valuation> Valuations { get; set; }
    }
    
    public class Valuation
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
    
        [ForeignKey(typeof(Stock))]     // Specify the foreign key
        public int StockId { get; set; }
        public DateTime Time { get; set; }
        public decimal Price { get; set; }
    
        [ManyToOne]      // Many to one relationship with Stock
        public Stock Stock { get; set; }
    }