【发布时间】:2014-04-10 20:32:53
【问题描述】:
让我们举个例子来解释我的问题。
MyTable1
+id
+myTable2Id
MyTable2
+id
我的视图1
+id
+myTable2Id
MyView1 存在于案例中,来自MyTable1 的数据。现在我想从我的视图中的 EF6.1 代码优先方法创建一个导航属性到 MyTable2。
我知道数据库优先方法是可能的,但代码优先方法也可能吗?如何实现?
编辑:
我在网上搜索了一些,但由于 View 这个词的含义很多,很难找到关于它的信息。
此外,使用我尝试过的代码中的方法,我总是收到无法完成迁移的错误。因为迁移尝试向视图添加外键,这是不可能的。
EDIT2:
详细说明我的解释。我希望能够通过以下方式在代码中处理它:
Guid table2Id = context.MyView1.FirstOrDefault().MyTable2.id;
EDIT3:
我会详细说明一下,看看我能否更好地解释我的问题。
当我将以下内容添加到我的视图实体中时:
public virtual MyTable2 Table2 { get; set;}
EF 会自动生成如下迁移:
public override void Up() {
CreateIndex("MyView1", "MyTable2Id");
AddForeignKey("MyView1", "MyTable2Id", "MyTable2", "id")
}
在运行 update-database 时会出现以下错误:
“无法在视图 'MyView1' 上创建索引,因为该视图未绑定架构”
编辑4:
在迁移不是石头的评论的帮助下......并且是可变的,我做到了。
我使用了以下 fluentAPI:
// Map one-to-zero or one relationship
modelBuilder.Entity<MyTable2>()
.HasRequired(t => t.MyTable1)
.WithOptional(t => t.MyTable2);
modelBuilder.Entity<MyTable1>()
.HasOptional(t => t.MyTable2);
并将我的表格更改为:(MyTable2 的 FK 并从视图中删除)
MyTable1
+id
MyTable2
+id +myTable1
我的视图1
+id
最终哪个更好,因为这样我的模型中的 Null 值更少。
【问题讨论】:
-
这个问题一直在变化。不太清楚,也不太刺激回答。
-
@GertArnold,如果你问我,问题没有改变?我只是试图改进解释。一句话中的问题:“如何在 EF 6.1 CodeFirst 中的视图上添加导航属性”。我改进了我的问题以获得答案.. 并展示我已经试图避免告诉我已经知道的事情的答案..
标签: c# entity-framework entity-framework-6 navigation-properties entity-framework-6.1