【问题标题】:EF Code-First User Testimonial SystemEF Code-First 用户见证系统
【发布时间】:2015-09-25 21:09:52
【问题描述】:

我的 DbContext 中有一个 User 实体。我想要的是用户应该能够互相提供引用/离开 cmets,因此我创建了 Reference 实体。

public class Reference
{
    public virtual User By { get; set; } // user who leaves a reference

    public virtual User To { get; set; } // user who has given a reference

    public string Opinions { get; set; }
}

用户实体中

public virtual ICollection<Reference> ReferencedTo { get; set; } // collection of references that user has given

public virtual ICollection<Reference> ReferencedBy { get; set; } // collection of references that user has been given

我应该怎么做才能使其与 DataAnnonations 或 FluentAPI 一起使用,或者您将如何解决这个问题?

【问题讨论】:

  • 如何使用 DataAnnotations 或 FluentAPI?您的实施有什么问题?
  • 我很困惑,因为我试图将相同的实体“用户”用于“参考”实体。实际上,几分钟前我已经添加了迁移并更新了我的数据库。生成了 User_Id 和 User_Id1 列。我不确定是否可以按预期将 User_Id 用于 ReferencedBy 并将 User_Id1 用于 ReferencedTo。

标签: c# entity-framework ef-code-first data-annotations ef-fluent-api


【解决方案1】:

你需要做这样的事情:

public class Reference
{
    public int ReferenceId { get; set; }

    public int ByUserId { get; set; }

    public virtual User By { get; set; } // user who leaves a reference

    public int ToUserId { get; set; }

    public virtual User To { get; set; } // user who has given a reference

    public string Opinions { get; set; }
}

public class User
{
    public int UserId { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Reference> ReferencedTo { get; set; } // collection of references that user has given

    public virtual ICollection<Reference> ReferencedBy { get; set; } // collection of references that user has been given
}

public class MyContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Reference> References { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Reference>()
            .HasRequired(x => x.By)
            .WithMany(x => x.ReferencedBy)
            .HasForeignKey(x => x.ByUserId)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<Reference>()
            .HasRequired(x => x.To)
            .WithMany(x => x.ReferencedTo)
            .HasForeignKey(x => x.ToUserId)
            .WillCascadeOnDelete(false);
    }
}

【讨论】:

  • 我认为我们不需要 ByUserId 或 ToUserId 吗?
  • 你是对的,它们是可选的。 This question 解释了差异。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
相关资源
最近更新 更多