C# 代码优先实体框架,将新表与我无法修改的视图关联

C# 代码优先实体框架,将新表与我无法修改的视图关联,c#,.net,entity-framework,ef-code-first,C#,.net,Entity Framework,Ef Code First,我有一个只读视图dbo.HRINFO。我构建了下面的对象来表示它。我还有一个用户表,其中包含此视图的FK,但无法定义任何正式约束。我正试图建立一个导航属性,这样每当我有一个用户对象时,我就可以访问UserInfo/view数据 [Table("dbo.HRINFO")] public class UserInfo { [Key] // But it's not really a key, there is no key, but it is null or unique publ

我有一个只读视图dbo.HRINFO。我构建了下面的对象来表示它。我还有一个用户表,其中包含此视图的FK,但无法定义任何正式约束。我正试图建立一个导航属性,这样每当我有一个用户对象时,我就可以访问UserInfo/view数据

[Table("dbo.HRINFO")]
public class UserInfo
{
    [Key] // But it's not really a key, there is no key, but it is null or unique
    public string EMAIL_KEY { get; set; }
    ... more properties
}
我正在创建的一个表,我想与上面的视图相关:

public class User
{
    [Key]
    public int Id { get; set; }
    public string Email_Key { get; set; } // can be a FK to above view
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual UserInfo UserInfo { get; set; }
    ... more properties
}
我尝试使用fluent API,但在以下内容以及许多变体中均无效:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserInfo>().HasKey(t => t.EMAIL_KEY).ToTable("dbo.HRINFO");
        modelBuilder.Entity<User>().HasKey(t => t.Id).HasRequired(t => t.UserInfo);
    }

我的观点是,我不知道我想做什么就可以做什么,因为我不能给视图添加任何约束。我是否可以在用户对象上放置一个公共虚拟UserInfo{get{[sql select*from the view where EMAIL_KEY=this.EMAIL_KEY]}}?还是类似的?怎么做?

这是我想到的最好的了。我不喜欢新的上下文/内部选择。我相信它将来会回来咬我的。我欢迎其他想法

public class User
{
    [Key]
    public int Id { get; set; }
    public string Email_Key { get; set; }

    [NotMapped]
    public virtual UserInfo UserInfo
    {
        get
        {
            return new Context().UserInfoes.Single(u => u.EMAIL_KEY == Email_Key);
        }
    }
}

我不能理解这个问题。我不能给视图添加任何约束,请解释一下你的意思。运行时错误?错误的结果。。。对不起,我不清楚-这不是我有权更改的视图。我有只读访问权限,因为它是由另一个部门拥有的数据。不,我的意思是,你告诉你尝试了什么,但不是你努力的结果。它是如何/为什么失败的?我假设EMAIL_KEY可为null是显示的障碍。它失败了,因为调用EMAIL_KEY作为外键试图在启动期间建立约束。数据库拒绝了该命令,因为我没有足够的权限添加约束,因此未建立导航属性。如果我进入下一阶段的话,它可以为空可能是一个阻碍,但它并没有表现出这是一个问题。