Asp.net mvc &引用;协会的主要目的环境足迹

Asp.net mvc &引用;协会的主要目的环境足迹,asp.net-mvc,entity-framework,asp.net-mvc-4,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,无法确定服务器之间关联的主体端 键入“XYZ.Models.Attachment”和“XYZ.Models.Accounts.User”。这个 必须使用显式配置此关联的主体端 关系可以是fluent API或数据批注 调用的目标已引发异常 当我尝试用我的EF模型更新数据库时,我遇到了这个错误 User.cs的一部分: [Table("Users")] public class User { [Key] [DatabaseGeneratedAttribute(DatabaseGen

无法确定服务器之间关联的主体端 键入“XYZ.Models.Attachment”和“XYZ.Models.Accounts.User”。这个 必须使用显式配置此关联的主体端 关系可以是fluent API或数据批注

调用的目标已引发异常

当我尝试用我的EF模型更新数据库时,我遇到了这个错误

User.cs的一部分:

[Table("Users")]
public class User
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    public int MainPhotoId { get; set; }

    [ForeignKey("MainPhotoId")]
    public virtual Attachment Photo { get; set; }
}
附件.cs

[Table("Attachments")]
public class Attachment
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int AttachmentId { get; set; }

    public string name { get; set; }


    public int UserId { get; set; }
    public DateTime AddDate { get; set; }

    public bool del { get; set; }

    [ForeignKey("UserId")]
    public virtual User Author { get; set; }

}
为什么我会犯这个错误?如何解决呢


关于

映射约定检测到
用户.照片
附件.作者
之间的一对一关系,无法推断主体和从属端是什么。因此有例外

实际上,根据你的评论,你想要两种关系,而不是一对一的关系。只有通过使用Fluent API重写约定才能实现这一点,并且可能需要使其中一个关系成为可选关系,因为否则,
用户
附件
之间存在循环相互依赖关系。例如,您可以通过选择一个可为空的外键使
User.Photo
属性成为可选的:

public int? MainPhotoId { get; set; }
然后映射将如下所示:

modelBuilder.Entity<User>()
    .HasOptional(u => u.Photo)
    .WithMany()
    .HasForeignKey(u => u.MainPhotoId);

modelBuilder.Entity<Attachment>()
    .HasRequired(a => a.Author)
    .WithMany()
    .HasForeignKey(a => a.UserId);
modelBuilder.Entity()
.has可选(u=>u.Photo)
.有很多
.HasForeignKey(u=>u.MainPhotoId);
modelBuilder.Entity()
.HasRequired(a=>a.Author)
.有很多
.HasForeignKey(a=>a.UserId);

使用此映射,您可以删除
[ForeignKey]
属性,因为FK属性的定义是Fluent API映射的一部分(
HasForeignKey
)。

类是否完整,或者是否省略了某些属性?这个例外对于这个模型没有意义。按照惯例,两者之间显然存在一对多的关系,
用户
显然是“主要目的”。哇!很抱歉我忘了粘贴
User.cs
model.的主要部分。。请看“现在编辑”。除了主照片,用户还可以有许多其他附件吗?是的!当然我只想在
MainPhoto
上使用
延迟加载
。但一般来说,用户也可以有其他附件。