【问题标题】:How to define entity for the following table?如何为下表定义实体?
【发布时间】:2016-09-21 05:42:31
【问题描述】:

我有两个表 T_users 和 M_Album 如下:

T_Users

T_专辑

M_Album中的2个外键字段UserID、ParentID和T_Users中都有主键字段ID。如何在代码优先的方法中编写实体代码?

我创造了

 M_Album = new HashSet<M_Album>();

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<M_Album> M_Album { get; set; }

在 T_Users.And 中

M_Album 中的public virtual T_Users T_Users { get; set; }

同时创建:

modelBuilder.Entity<T_Users>()
              .HasMany(e => e.M_Album)
              .WithOptional(e => e.T_Users)
              .HasForeignKey(e => e.UserID);

        modelBuilder.Entity<T_Users>()
         .HasMany(e => e.M_Album)
         .WithOptional(e => e.T_Users)
         .HasForeignKey(e => e.ParentID);

这是正常工作还是其他方法?

【问题讨论】:

  • M_Album的UserID和ParentID,都需要指向T_Users的ID吗?
  • @sachin 如何指向 T_Users 的 ID?如果可能请分享代码

标签: c# asp.net-mvc-4 ef-code-first


【解决方案1】:

如果您对另一个表有两个 FK,您还应该在主表声明处指定两个 IColletions。尝试使用数据注释方法而不是 Fluen api:

public class T_User
{
    [InverseProperty("User")]
    public virtual ICollection<T_Album> userAlbums {get; set;}
    [InverseProperty("Parent")]
    public virtual ICollection<T_Album> parentAlbums {get; set;}

    //other stuff...
}

public class T_Album
{
    [ForeignKey("User")]
    public int UserId {get;set;}
    public virtual T_User User {get; set;}

    [ForeignKey("Parent")]
    public int ParentId {get;set;}
    public virtual T_User Parent {get; set;}

    //other stuff...
}

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 2017-08-23
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    相关资源
    最近更新 更多