我有一个需要解决的问题-我正在为新应用程序开发数据模型。我使用的是第一个.net核心代码。
在我的应用程序中,用户可以创建多个新项目,每个项目的属性几乎没有什么不同。我需要将这些项目“汇总”到一个表中,以便例如在每个项目上添加注释。
因此,Item1
和AggItem
与Item2
和AggItem
之间始终存在1:1关系。
表AggItem
正是这样做的。应该有包含以下内容的复合主键
Item1
或Item2
表中的主键ItemType
,即string
,将区分项目我已经尝试了很多东西,但是我真的无法正常工作。我真的只是想在此时建立并运行数据模型。
任何帮助表示赞赏!
AggItem
表中的数据如下所示:
ID ItemId ItemType Description
1 1 "item1" "First item from table Item1"
2 2 "item1" "Second item from table Item1"
3 1 "item2" "First item from table Item2"
4 2 "item2" "Second item from table Item2"
应用上下文:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<AggItem>().HasKey(table => new {
table.ItemId,
table.ItemType
});
}
域类模型:
public class Item1
{
public int Id { get; set; }
public string Description { get; set; }
public string UsedByCompany { get; set; }
public string Level { get; set; }
public int AggItemId { get; set; }
public virtual AggItem AggItem { get; set; }
}
public class Item2
{
public int Id { get; set; }
public string Description { get; set; }
public string Confidentiality { get; set; }
public string Quantity { get; set; }
public int AggItemId { get; set; }
public virtual AggItem AggItem { get; set; }
}
public class AggItem
{
public int Id { get; set; }
public string Description { get; set; }
public int ItemId { get; set; }
public string ItemType { get; set; }
public virtual Comments {get; set;}
public virtual Item1 item1 { get; set; }
public virtual Item2 item2 { get; set; }
}
Item1创建方法:
[BindProperty]
public Item1 Item1 { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
var aggItem = new AggItem
{
item1 = Item1,
Description = Item1.Description,
ItemType = "Item1",
ItemId = Item1.Id
};
_context.Add(new Item1
{
Description = Item1.Description,
AggItem = aggItem
});
_context.item1.Add(Item1);
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
答案 0 :(得分:0)
您应该使用OO继承模型。 Item1,Item2应该从BaseItem继承。 更多信息:https://docs.microsoft.com/en-us/ef/core/modeling/relational/inheritance