Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF实体没有';不要指定导航属性_C#_Entity Framework_Model View Controller_Ef Code First - Fatal编程技术网

C# EF实体没有';不要指定导航属性

C# EF实体没有';不要指定导航属性,c#,entity-framework,model-view-controller,ef-code-first,C#,Entity Framework,Model View Controller,Ef Code First,我试过好几种方法,但都没能成功 我有两个实体。用户和用户详细信息(如下所述)。我设法添加一个用户及其用户详细信息,但当我试图使用include(“UserDetails”)获取一个用户时,会出现以下错误 指定的包含路径无效。实体类型 “Floralist.Repository.Context.User”未声明导航 名为“UserDetails”的属性 实体如下: public class User : Entity { public User() { Detail

我试过好几种方法,但都没能成功

我有两个实体。用户和用户详细信息(如下所述)。我设法添加一个用户及其用户详细信息,但当我试图使用include(“UserDetails”)获取一个用户时,会出现以下错误

指定的包含路径无效。实体类型 “Floralist.Repository.Context.User”未声明导航 名为“UserDetails”的属性

实体如下:

public class User : Entity
{
    public User()
    {
        Details = new UserDetails();
        //FlowerList = new Collection<Flower>();
    }

    public Guid Id { get; set; }

    public string Username { get; set; }

    [Index(IsUnique = true)]
    public string Email { get; set; }

    public string Password { get; set; }

    public Roles Role { get; set; }

    public UserState State { get; set; }

    public int? DetailsId { get; set; }
    public UserDetails Details { get; set; }

    public DateTime? LastLoginDate { get; set; }

    //public ICollection<Flower> FlowerList { get; set; }

    //public ICollection<Friend> FriendList { get; set; }

}

public class UserDetails : Entity
{
    public int Id { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string FullName => $"{this.FirstName} {this.LastName}";

    public string Address { get; set; }

    public string PostalCode { get; set; }

    public DateTime BirthDate { get; set; }

    public int? WatermarkId { get; set; }

    public Blob Watermark { get; set; }

    public int? ProfilePictureId { get; set; }

    public Blob ProfilePicture { get; set; }
}
public class UserMap : EntityTypeConfiguration<User>
{
    public UserMap()
    {
        this.HasKey(t => t.Id);

        this.ToTable("Users");

        this.Property(t => t.Id).HasColumnName("Id");

        this.Property(t => t.Username)
            .IsRequired()
            .HasMaxLength(48)
            .HasColumnName("Username");

        this.Property(t => t.Password)
            .HasMaxLength(256)
            .HasColumnName("Password");

        this.Property(t => t.Email)
            .IsRequired()
            .HasMaxLength(256)
            .HasColumnName("Email");

        this.Property(t => t.Role)
            .IsRequired()
            .HasColumnName("Role");

        this.Property(t => t.State)
            .IsRequired()
            .HasColumnName("State");

        this.Property(t => t.LastLoginDate)
            .IsOptional()
            .HasColumnName("LastLoginDate");

        this.Property(t => t.CreateDate)
            .IsRequired()
            .HasColumnName("CreateDate");

        this.Property(t => t.UpdateDate)
            .IsOptional()
            .HasColumnName("UpdateDate");

        this.Property(t => t.DetailsId)
            .HasColumnName("DetailsId");
    }
}

public UserDetailsMap()
    {
        this.HasKey(t => t.Id);

        this.ToTable("UsersDetails");

        this.Property(t => t.Id).HasColumnName("Id");

        this.Property(t => t.WatermarkId)
            .HasColumnName("WatermarkId");

        this.Property(t => t.ProfilePictureId)
            .HasColumnName("ProfilePictureId");

        this.Property(t => t.FirstName)
            .IsRequired()
            .HasMaxLength(64)
            .HasColumnName("FirstName");

        this.Property(t => t.LastName)
            .IsRequired()
            .HasMaxLength(64)
            .HasColumnName("LastName");

        this.Property(t => t.Address)
            .HasMaxLength(512)
            .HasColumnName("Address");

        this.Property(t => t.PostalCode)
            .HasMaxLength(64)
            .HasColumnName("PostalCode");

        this.Property(t => t.BirthDate)
            .HasColumnName("BirthDate");

        this.Property(t => t.CreateDate)
            .IsRequired()
            .HasColumnName("CreateDate");

        this.Property(t => t.UpdateDate)
            .IsRequired()
            .HasColumnName("UpdateDate");

        //this.HasOptional(t => t.ProfilePicture).WithMany().HasForeignKey(f => f.ProfilePictureId);
        //this.HasOptional(t => t.Watermark).WithMany().HasForeignKey(f => f.WatermarkId);
    }

如果我没有指定包含路径,用户详细信息将显示为空。

通过阅读本文,我终于实现了这一点

我必须在User-to-UserDetails和UserDetails-to-User中放置一个虚拟属性,并映射
this.hasportional(x=>x.Details).WithRequired(x=>x.User)


感谢大家

使用System.Data.Entity添加
到代码文件的顶部,并将
.Include(“UserDetails”)
替换为
.Include(i=>i.UserDetails)
-这应该可以帮助您找到问题所在,但我猜您尚未在两者之间映射正确的关系,因为
UserDetails
没有类型为User`的虚拟字段将其链接到Users表
Include
需要导航属性的名称,在您的情况下是
Details
(不是
UserDetails
)@IvanStoev发现得很好。我错过了那一个…所以它实际上是
。Include(I=>I.Details)
@IvanStoev完成了这个技巧,但是细节的每个属性都是空的,即使它填充在数据库中。您还没有定义表之间的关系,有什么理由这样做吗?如果您知道映射是正确的,是否相应地填充了FK值?
internal class FloralistContext : DbContext
{
    private const string Dbmodule = "Floralistdb";

    public FloralistContext() : base(Dbmodule)
    {
    }

    public DbSet<User> Users { get; set; }

    public DbSet<UserDetails> UserDetails { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

        modelBuilder.Configurations.Add(new UserMap());
        modelBuilder.Configurations.Add(new UserDetailsMap());
    }
}
            var user = Repository.Users.Include("UserDetails").FirstOrDefault(u => u.Email.Equals(email, StringComparison.InvariantCultureIgnoreCase) && u.Password.Equals(password));