如何在EF 6.1 CodeFirst中为视图添加导航属性
本文关键字:视图 添加 导航 属性 CodeFirst EF | 更新日期: 2023-09-27 17:57:45
让我们用一个案例来解释我的问题。
MyTable1
+id
+myTable2Id
MyTable2
+id
MyView1
+id
+myTable2Id
案例中存在MyView1,来自MyTable1的数据。现在,我想在View to MyTable2中使用EF6.1 Code first方法创建一个Navigation属性。
我知道数据库优先的方法是可能的,但代码优先的方法也可能吗?
编辑:
我在网上搜索了一些,但由于View这个词的含义很多,很难在上面找到信息
同样,对于我尝试过的代码中的方法,我总是会得到一个错误,即迁移无法完成。因为迁移试图向视图添加外键,但这是不可能的。
第2版:
详细阐述一下我的解释。我希望能够以以下方式在代码中处理它:
Guid table2Id = context.MyView1.FirstOrDefault().MyTable2.id;
第3版:
我会再详细解释一下,看看是否能更好地解释我的问题。
当我将以下内容添加到我的视图实体中时:
public virtual MyTable2 Table2 { get; set;}
EF将自动生成以下迁移:
public override void Up() {
CreateIndex("MyView1", "MyTable2Id");
AddForeignKey("MyView1", "MyTable2Id", "MyTable2", "id")
}
哪个在运行更新数据库时出现以下错误:
"无法对视图'MyView1'创建索引,因为该视图未绑定到架构"
第4版:
有人评论说,移民不是石头做的。。并且是可变的,我做到了。
我使用了以下流体API:
// 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);
将我的表更改为:(将FK更改为MyTable2并从视图中删除)
MyTable1
+id
MyTable2
+id+myTable1
MyView1
+id
这最终是更好的,因为这样我的模型中的Null值就更少了。
在EF中,您可以使用数据库视图,将其映射到实体并引用它,就像处理表一样。对于代码优先的过程,您必须从迁移类中创建View in Up并将其放入Down方法
public partial class AddView : DbMigration
{
public override void Up()
{
this.Sql(@"CREATE VIEW MyView1 AS ....");
}
public override void Down()
{
this.Sql(@"DROP VIEW MyView1....");
}
}
编辑:
public long myTable2Id { get; set; }
[ForeignKey( "myTable2Id" )]
public virtual MyTable2 Table2 {get;set;}