如果我将两个实体关联为多对多关系,如何在我自动创建的“链接表”中存储其他字段?
我尝试过去“两个1对多个关联” - 但是我很难正确配置级联删除。
答案 0 :(得分:0)
除非数据库级别的某些函数或过程使用了这些额外的列,否则链接表中的额外列将无用,因为它们在实体框架级别完全不可见。
听起来你需要重新思考你的对象模型。如果您绝对需要这些列,您可以随后手动添加它们。
答案 1 :(得分:0)
您很可能需要在域模型中公开关联。
例如,我需要针对多对多关系(项目<>图像)中的项目存储索引(显示顺序)。
这是关联类:
public class ProjectImage : Entity
{
public Guid ProjectId { get; set; }
public Guid ImageId { get; set; }
public virtual int DisplayIndex { get; set; }
public virtual Project Project { get; set; }
public virtual Image Image { get; set; }
}
这是映射:
public class ProjectImageMap : EntityTypeConfiguration<ProjectImage>
{
public ProjectImageMap()
{
ToTable("ProjectImages");
HasKey(pi => pi.Id);
HasRequired(pi => pi.Project);
HasRequired(pi => pi.Image);
}
}
从项目地图:
HasMany(p => p.ProjectImages).WithRequired(pi => pi.Project);
在项目上映射到以下属性:
public virtual IList<ProjectImage> ProjectImages { get; set; }
希望有所帮助
本
答案 2 :(得分:0)
假设两种类型之间存在多对多关联:User和Message,关联类定义为具有其他属性的UserMessageLink。
public class User {
public int Id {get;set;}
}
public class Message {
public int Id {get;set;}
}
//The many-to-many association class with additional properties
public class UserMessageLink {
[Key]
[Column("RecieverId", Order = 0)]
[ForeignKey("Reciever")]
public virtual int RecieverId { get; set; }
[Key]
[Column("MessageId", Order = 1)]
[ForeignKey("Message")]
public virtual int MessageId { get; set; }
public virtual User Reciever { get; set; }
public virtual Message Message { get; set; }
//This is an additional property
public bool IsRead { get; set; }
}