【发布时间】:2020-09-29 17:45:34
【问题描述】:
我有一个C# WPF 应用程序使用SQLite 数据库和Entity Framework。我有一个Contact类,可以有多个消息,所以是一对多的关系,设置方式如下(简化版):
public class Message {
public int PK { get; set; }
public int SenderKey { get; set; }
public Contact Sender { get; set; }
}
public class Contact {
public int PK { get; set; }
public ICollection<Message> Messages { get; set; }
}
然后我使用 Fluent API 设置关系,方式如下:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
...
modelBuilder.Entity<Message>()
.HasOptional(e => e.Sender)
.WithMany(e => e.Messages)
.HasForeignKey(e => e.SenderKey);
}
我将拥有大量数据(并且这种循环依赖也有很多麻烦,尤其是在以分离模式编辑对象时)因此将 Messages 集合放在内存中并不是一个好主意每一次接触。为避免这种情况,我想删除该列表,因此最好从 the docs 实现“约定 1”(仅在 Message 类中包含 Contact 对象,仅此而已)。
这个解决方案的问题是我的应用已经发布了,所以我不能简单地改变结构,我需要迁移。我的问题是如何迁移 Fluent API 设置的这种关系?
我试图从OnModelCreating 中删除关系,但在启动应用程序时出现以下异常:
System.Data.SQLite.SQLiteException: SQL logic error no such column: Extent1.Sender_PK(那个 Extent1 表是什么?)
【问题讨论】:
标签: c# entity-framework sqlite ef-fluent-api