繁体   English   中英

Fluent API EF 6-如何配置1:M(M具有相同的类型)

[英]Fluent API EF 6 - How to configure 1:M (with M being of the same type)

我正在使用Fluent Api迈出第一步,并试图了解如何执行以下操作:这是我的模型。

public class Person
{
    public int Id {get ; set;}
    public List<View> Viewers {get; set;}
}

public class View
{
    public int Id {get; set;}
    public Person Viewer {get; set;}
}

这是我的模型的简化,我想跟踪访问其他个人资料的Person。 我想为每个看过个人资料的人知道。

我已经试过了:

var view = modelBuilder.Entity<View>();
        view.HasKey(v=>v.Id);

var person = modelBuilder.Entity<Person>();
        person.HasKey(r => r.Id);
        person.HasMany(t => t.Viewers).WithRequired(t=>t.Viewer);

我知道这似乎很愚蠢,但是从我的代码中,我希望能够导航:

人物->观看者(让我们观看者1)->观看者,依此类推...

这是正确的方法吗?

提前致谢!

尝试这个

public class Person
{   [Key]
    public int Id { get; set; }
    public ICollection<View> Viewers { get; set; }
}

public class View
{   [Key]
    public int Id { get; set; }
    public int ViewerId { get; set; } //this is a ForeingKey
    public Person Viewer { get; set; }
}

public class MyDbContext : DbContext
{
    public DbSet<Person> Persons { get; set; }
    public DbSet<View> Views { get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<View>().HasRequired(a => a.Viewer).WithMany().HasForeignKey(a => a.ViewerId);
        base.OnModelCreating(modelBuilder);
    }
}

您可以对DataAnnotation Attributes进行相同的操作,然后不需要使用Fluent API。

public class View
{
    public int Id { get; set; }
    public int ViewerId { get; set; }
    [ForeignKey("ViewerId")] // here is a foreignkey property
    [InverseProperty("Viewers")] // here is a navigation property in Person class
    public Person Viewer { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM