实体框架-如何插入到多对多表与额外的属性
本文关键字:属性 框架 何插入 插入 实体 | 更新日期: 2023-09-27 18:08:17
我有两个实体
项目实体[Table("Project")]
public class Project
{
public Project()
{
Participants = new List<Participation>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[StringLength(225)]
[Index(IsUnique=true)]
public string Name { get; set; }
public ProjectVisibility Visibility { get; set; }
public virtual List<Participation> Participants { get; set; }
}
和UserProfile实体
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public virtual List<Participation> Participations { get; set; }
}
每个用户都可以参与一个具有不同访问级别的项目,因此在链接表中我不仅存储了2个id,而且还存储了访问级别的第3个属性。(可访问性只是一个具有1/2/3/4可用值的枚举)如下:
[Table("Participations")]
public class Participation
{
public virtual Project ProjectReference { get; set; }
public virtual UserProfile UserReference { get; set; }
[Key, Column(Order = 0)]
public int ProjectID { get; set; }
[Key, Column(Order = 1)]
public int UserID { get; set; }
public Accessibility AccessLevel { get; set; }
}
我正在尝试创建一个新的项目,并分配当前用户作为项目的所有者,但我不断得到不同类型的错误。以下是我的"CreateProject"代码:
public void CreateProject(Project model, UserProfile owner)
{
var participation = new Participation { ProjectReference = model, UserReference = owner, AccessLevel = Accessibility.Owner };
Participations.Add(participation);
Projects.Add(model);
SaveChanges();
}
谁能告诉我该怎么做呢?
添加外键属性,告知EF键和导航属性之间的关系:
[Table("Participations")]
public class Participation
{
[ForeignKey("ProjectID")]
public virtual Project ProjectReference { get; set; }
[ForeignKey("UserID")]
public virtual UserProfile UserReference { get; set; }
[Key, Column(Order = 0)]
public int ProjectID { get; set; }
[Key, Column(Order = 1)]
public int UserID { get; set; }
public Accessibility AccessLevel { get; set; }
}
还要确保您已将项目和用户附加到当前上下文。否则EF将以与根参与实体相同的状态添加它们,即具有Added
状态。EF将把所有实体视为新添加的,并将尝试将它们插入数据库。