4 回答

TA貢獻1821條經驗 獲得超5個贊
我檢查了這個并且它起作用了:
private readonly List<RelatedEntity> _relatedEntitys;
public IReadOnlyCollection<RelatedEntity> RelatedEntitys => _relatedEntitys;
并且配置必須如下所示:
builder.HasMany(x => x.RelatedEntitys)
.WithOne()
.IsRequired()
.HasForeignKey(x => x.RelatedEntityId)
.OnDelete(DeleteBehavior.Cascade);
builder.Metadata
.FindNavigation("RelatedEntitys")
.SetPropertyAccessMode(PropertyAccessMode.Field);

TA貢獻1847條經驗 獲得超7個贊
EF core 要求您使用具體類型作為支持字段。您需要將代碼更改為:
private readonly List<RelatedEntity> _relatedEntities = new List<RelatedEntity>(); public IReadOnlyList<RelatedEntity> RelatedEntities => _relatedEntities.ToList();

TA貢獻1851條經驗 獲得超4個贊
錯誤消息響亮而清晰:
IList 不可分配給 IReadOnlyList
將屬性類型更改為與支持字段相同的類型即可解決問題。
更新:
因為 IEnumerable<T> 默認情況下是只讀的,我相信這將是您最好的選擇。
public class MyEntity: Entity
{
public int Id { get; private set; }
private readonly List<RelatedEntity> _relatedEntities = _collection.ToList().AsReadOnly();
public IEnumerable<RelatedEntity> RelatedEntities => _relatedEntities;
}
按如下方式更新您的 Fluent API:
builder.HasKey(x=>x.Id);
builder.Metadata.FindNavigation("RelatedEntities")
.UsePropertyAccessMode(PropertyAccessMode.Field);

TA貢獻1830條經驗 獲得超3個贊
對于 EF Core 2,我相信支持字段必須是?HashSet<T>
?類型才能被框架正確識別,因此這應該有效:
public?class?MyEntity?{ ??private?HashSet<RelatedEntity>?_relatedEntities?=?new?HashSet<RelatedEntity>();?? ??public?IReadOnlyCollection<RelatedEntity>?RelatedEntities?=>?_relatedEntities; }
- 4 回答
- 0 關注
- 364 瀏覽
添加回答
舉報