我意识到这已被不止一次回答,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类型,因此它不需要新的定义。