实体框架6中加入表的一对多

时间:2015-10-27 12:16:03

标签: c# sql-server entity-framework entity-framework-6

我意识到这已被不止一次回答,here for example,但似乎没有什么对我有效,我不知道为什么。

我的数据库有网站用户用户可能拥有网站,或者他可能在网站工作。他可能拥有网站 A和C,但可以使用网站 B.但是,每个网站只有一个工作人员和一个所有者。因此,我创建了一个包含以下三个表的连接表结构:用户网站 User_Site User_Site 包含一个名为 role 的列,可以是“worker”或“owner”。

为简化起见,我创建了两个视图, view_Worker view_Owner 。例如,view_Owner是

SELECT User_Site.site_id, User.*
FROM User_Site
JOIN User ON User_Site.user_id = User.user_id
WHERE User_Site.role = "owner"

因此, view_Owner 中的每一行都包含用户以及用户 site_id 的所有信息>加入为“所有者”。

现在,我正在尝试使用Entity Framework 6围绕此数据库构建API。我在尝试许多不同的事情时遇到了一些错误,因此我不确定要在此处发布哪些错误。我会发布最近的错误:

dbContext.cs

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Site>()
        .HasOptional<User>(s => s.Owner)
        .WithMany()
        .Map(m =>
        {
            m.MapKey("site_id").ToTable("view_Owner");
        });
}

user.cs

[Table("User")]
public class User
{
    [Key, Column("user_id")]
    public int ID { get; set; }
}

site.cs

[Table("Site")]
public class Site
{
    [Key, Column("site_id")]
    public int ID { get; set; }

    public virtual User Owner { get; set; }
}

我使用此配置获得的错误消息是

  

在模型中找不到指定的表'view_Owner'。确保   表名已正确指定。

因此,下一步是尝试将此表添加到模型中。我将[Table("User")]更改为[Table("view_Owner")],并收到以下错误消息:

  

(66,6):错误3021:从行开始映射片段时出现问题   66:表User中的以下每列都映射到多个   概念性侧属性:User.site_id映射到      (66,6):错误3025:从行开始映射片段时出现问题   66:必须为表的所有键属性(User.user_id)指定映射   用户。

澄清

理想情况下,我想通过将view_Owner.site_id加入Site.site_id主键,简单地告诉EntityFramework从view_Owner表加载Site上的Owner属性。但是,由于Owner属性仍然是User类型,因此它不需要新的定义。

0 个答案:

没有答案