我计划建立一个这样的模型:
public class Message{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int MessageId { get; set; }
public string Category { get; set; }
[Required]
public string Subject { get; set; }
public string MessageBody { get; set; }
// Sender IS ASSOCIATION TO UserProfile 0..1
[ForeignKey("Sender")]
public virtual int? UserId { get; set; }
public UserProfile Sender { get; set; }
// Recipients IS ASSOCIATION TO UserProfile 0..n
public virtual ICollection<UserProfile> Recipients { get; set; }
}
因此,消息模型将具有2个与UserProfile模型的关联,具有不同的多重性。我该如何实现?我在MVC Web应用程序中使用Entity-Framework 6。谢谢!
答案 0 :(得分:1)
您只需添加映射两个语句:
HasOptional(c=>c.Sender).WithMany().HasForeignKey(c=>c.UserId);
HasMany(c=>c.Recepients).WithMany(c=>c.IncomingMessages);
我认为你在消息和接收者之间有多对多的关系,在发件人和消息之间有一对多的关系。
您应该在覆盖方法
中将此代码添加到dbcontext类protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Message>()
.HasOptional(c=>c.Sender).WithMany().HasForeignKey(c=>c.UserId)
.HasMany(c=>c.Recepients).WithMany(c=>c.IncomingMessages);
}