【发布时间】:2025-12-28 23:40:07
【问题描述】:
我有一个只读视图 (dbo.HRINFO)。我构建了下面的对象来表示它。我还有一个“用户”表,其中包含此视图的 FK,但无法定义官方约束。我正在尝试建立一个导航属性,这样每当我有一个“用户”对象时,我就可以访问“用户信息/视图”数据。
[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);
}
我现在不是我想做的事情可以完成,因为我无法向视图添加任何约束。我可以在 User 对象上放置一个公共虚拟 UserInfo { get { [sql select * from view where EMAIL_KEY = this.Email_Key] } } 吗?或者类似的东西?怎么样?
【问题讨论】:
-
我无法理解这个问题。能否请您更详细地改写它
-
我无法向视图添加任何约束 请解释一下您的意思。运行时错误?错误的结果? ...
-
抱歉不清楚 - 这不是我有权更改的观点。我有只读权限,因为它是另一个部门拥有的数据。
-
不,我的意思是你告诉你你尝试了什么,而不是你努力的结果。它是如何/为什么失败的?我假设
EMAIL_KEY可以为空是显示停止符。 -
它失败了,因为调用 EMAIL_KEY 一个外键试图在 Up() 期间建立一个约束。数据库拒绝了该命令,因为我没有足够的权限来添加约束,因此没有建立导航属性。如果我进入下一个阶段,它可以为空可能是一个阻碍,但它并没有表现得像那是一个问题(还)。
标签: c# .net entity-framework ef-code-first