[英]EF Core SQLite How can I seed data with foreign keys
如何將種子數據添加到DbSet
並將其與另一個DbSet
記錄綁定? 使用我的解決方案, ForeignKey
值已正確設置,但ObjectModel
中的TypeModel
始終為null
。 另外,在將ObjectTypeModel
創建到ICollection
之后,如何將對象添加到 ICollection 中,或者這是否會從 EF Core 自動填充?
我的模型:
public class ObjectModel : BaseEntity
{
[Key]
public int Id { get; set;
public String Name { get; set; }
public String PreviewImage { get; set; }
public String TagName { get; set; }
// Foreign keys---
public int TypeId { get; set; }
public ObjectTypeModel TypeModel { get; set; }
//---
}
public class ObjectTypeModel : BaseEntity
{
[Key]
public int TypeModelId { get; set; }
public String Name { get; set; }
public String PreviewImage { get; set; }
public String TagName { get; set; }
public ICollection<ObjectModel> Objects { get; set; }
}
我來自DbContext
的OnModelCreating()
:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ObjectModel>()
.HasOne<ObjectTypeModel>(d => d.TypeModel)
.WithMany(dm => dm.Objects)
.HasForeignKey(dkey => dkey.TypeId);
}
我的播種數據方法:
context.Set<ObjectTypeModel>().AddRange(new ObjectTypeModel[]
{
new ObjectTypeModel()
{
TypeModelId = 1,
Name = "TestType",
PreviewImage = null,
TagName = "TestType"
}
});
context.SaveChangesAsync();
var objectTypeOne = context.ObjectTypes.SingleOrDefault(a => a.TypeModelId.Equals(1));
context.Set<ObjectModel>().Add(new ObjectModel
{
new ObjectModel() { Name="Test", PreviewImage = "null", TagName = "Test", TypeId = objectTypeOne.TypeModelId, TypeModel = objectTypeOne }
});
context.SaveChangesAsync();
嘗試接收數據時的 output ,其中 TypeModel 始終為null
。
{"id":1,"name":"Test","previewImage":"null","tagName":"Test","typeId":1,"typeModel":null,"createdOn":"2020- 06-29T23:01:24.744472","modifiedOn":"2020-06-29T23:01:24.744464"}
它不能自動填充,這就是接收數據時typeModel
為 null 的原因。
您需要組裝ObjectModel
。
細節:
當您執行SaveChangesAsync
時,只有 [ Name="Test", PreviewImage = "null", TagName = "Test", TypeId = objectTypeOne.TypeModelId
] 保存在數據庫中。
context.Set<ObjectModel>().Add(new ObjectModel
{
new ObjectModel() { Name="Test", PreviewImage = "null", TagName = "Test", TypeId = objectTypeOne.TypeModelId, TypeModel = objectTypeOne }
});
context.SaveChangesAsync();
在返回ObjectModel
之前使用ObjectModel.TypeModelId
設置ObjectModel.TypeModel
。
public IActionResult GetObjectModel(int? id)
{
if (id == null)
{
return NotFound();
}
var objectModel= await _context.ObjectModel.FindAsync(id);
if (objectModel== null)
{
return NotFound();
}
var typeModel= await _context.TypeModel.FindAsync(objectModel.TypeModelId);
if (typeModel!= null)
objectModel.TypeModel = typeModel;
return View(objectModel);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.