0

我正在尝试使用 SQLite.Net 和 SQLiteNetExtensions 设置 SQLite 数据库。我似乎无法在数据库中创建外键。我已删除所有表并使用模型类重新创建它们。我已经检查了 SQLite 管理器中的编译指示并打开了外键。在我的示例中,一个地块可以有许多树。关于我可能缺少什么的任何建议?

public class Tree
    {
        [PrimaryKey, AutoIncrement]
        public int TreeId { get; set; }
        [NotNull]
        public int TreeNumber { get; set; }
        [NotNull]
        public double Dbhob { get; set; }

        public double? Height { get; set; }
        [NotNull,Default(value: false)]
        public bool? HeightTree { get; set; }
        public string QualityCode { get; set; }
        [ForeignKey(typeof(Plot))]
        public int PlotId { get; set; }
        [ManyToOne]
        public Plot PlotInverse { get; set; }


    }



    public class Plot
    {
        [PrimaryKey, AutoIncrement]
        public int PlotId { get; set; }
        [NotNull, Unique]
        public System.Guid PlotGuid { get; set; }
        [NotNull, MaxLength(60)]
        public string Strata { get; set; }
        [NotNull, MaxLength(60)]
        public string PlotNumber { get; set; }

        public DateTime MeasureDate { get; set; }
        [MaxLength(70)]
        public String AssessorLead { get; set; }
        [MaxLength(60)]
        public String AssessorCrew { get; set; }
        [Default(value: 0)]
        public double PlotArea { get; set; }
        public double BasalArea { get; set; }

        [OneToMany("PlotId","PlotId")]
        public List<Tree> Trees { get; set; }
    }
4

1 回答 1

0

外键属性不在 sqlite 数据库中创建,因为 sqlite-net 不支持外键,并且 SQLite-Net 扩展建立在它之上。它们在运行时用于保存和加载相关对象。


作为旁注,您应该更改此行:

[OneToMany("PlotId","PlotId")]
public List<Tree> Trees { get; set; }

对此:

[OneToMany("PlotId","PlotInverse")]
public List<Tree> Trees { get; set; }

或将其全部删除,让自动发现发挥作用:

[OneToMany]
public List<Tree> Trees { get; set; }
于 2016-04-15T09:19:06.617 回答