EF

技术

Entity Framework Core SQLite provider向已存在的表中添加外键

SQLite本身不支持向已创建的表中添加外键,类似的限制还有很多,比较蛋疼,具体可以参见SQLite Limitations [https://docs.microsoft.com/en-us/ef/core/providers/sqlite/limitations]。 项目中,如果是测试的时候,数据不是很重要的话,最方便的方法就是把已经创建的Migrations包括ModelSnapshot都删掉,重新Add-Migration重建数据库。 对于已经发布的应用,数据库不能删了创建的话,可以“曲线救国”。 假设需要给TableA添加一个需要建立外键的字段ColumnA,为了增加难度,假设TableB中的Column B是TableA的外键。具体操作方法如下: 1. 先在代码中TableA里添加ColumnA(不设置外键),Add-Migration,更新到线上数据库 2. 将本地的数据库改名为database-backup,删除项目中所有Migrations和ModelSnapshot,创建一个RebuildDatabase的Migration,创建全新的数据库,从新数据

技术

Entity Framework Code First 两个字段关联到同一张表

之前也遇到过类似的问题,属于Code First中稍微复杂点的关系处理,现将解决方法记录下来。 场景: 某网上书城欲推出书券功能,书券购买之后,会有一个唯一的Id,可用来直接兑换某本书。书券可以自己兑换,也可以将ID送给朋友来兑换。现在我们需要将书券的购买者和兑换者都记录下来。 类的设计和注意事项: public class BookCoupon { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] [Index("BookCouponIdIndex")] public Guid BookCouponId { get; set; } [Index("BookIdIndex")] public int BookId { get; set; } [ForeignKey("BookId")] public virtual Book Book { get; set; } [Index("