我有一个数据库模型,其中模型之间存在关系,这给 Code First 带来了一些问题。下面是一个构造的例子。
一个读者可以读过几本书,而一本书可以被几个读者读过。此外,每个读者可能都有一本最喜欢的书。
//not-working model
public class BookReader
{
public virtual List<Book> ReadBooks { get; set; }
public virtual Book FavoriteBook { get; set; }
public int ID { get; set; }
}
public class Book
{
public string BookName { get; set; }
public int ID { get; set; }
}
这不是很好。如果在代码中,多个读者被设置为阅读同一本书,则只有一个读者会将其保存到数据库(可能是最后一组)。
此外,如果 BookReader.FavoriteBook 和 BookReader.ReadBooks 包含同一本书并且 db.SaveChanges() 创建这本新书(不是现有的数据库实体),它将导致此错误:
保存不公开外键的实体时发生错误他们关系的属性。
这是我对 InverseProperty 和导航属性的修复。
//working model
public class BookReader
{
[InverseProperty("CurrentReaders")]
public virtual List<Book> ReadBooks { get; set; }
public virtual Book FavoriteBook { get; set; }
public int ID { get; set; }
}
public class Book
{
public string BookName { get; set; }
public int ID { get; set; }
//new, unwanted, property
public virtual List<BookReader> CurrentReaders { get; set; }
}
我不想像这样改变模型。有没有一种方法可以在不更改模型的情况下使用 Fluent API 完成?
我之前发布了一个类似的问题,但删除了它,因为这个问题与问题无关