我的DBMS(mysql)中有以下结构:
create table tasks
(
id int auto_increment not null,
primary key (id),
name varchar(200) not null,
unique(name)
);
create table species
(
id int auto_increment not null,
primary key (id),
id_task int,
foreign key (id_task) references tasks(id) on delete cascade,
is_history tinyint not null default 0
);
一个任务可以有当前物种(当is_history = 0时)和历史物种(当is_history = 1时)。 我创建了以下类:
public class Specie
{
public int Id { get; set; }
public int TaskId { get; set; }
public Task ParentTask { get; set; }
}
public class Task
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Specie> CurrentSpecies { get; set; }
public ICollection<Specie> HistSpecies { get; set; }
}
使用代码创建映射的正确方法是什么?将“CurrentSpecies”和“HistSpecies”映射到一个表“species”中,并且在一个字段“is_history”中存在差异?
答案 0 :(得分:0)
您可以像这样创建Species类:
public class Specie
{
public int Id { get; set; }
public int TaskId { get; set; }
public Task ParentTask { get; set; }
public ICollection<Specie> CurrentSpecies { get; set; }
public ICollection<Specie> HistSpecies { get; set; }
}
如果您必须在此对象中创建Task对象和集合,那么我建议您重新考虑您的设计。基本上,任务对象应该成为聚合根。
我还会考虑使用Fluent Api进行复杂映射,因为它提供了一些灵活性。你可以在这里查看: