首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Entity Framework 4中轻松使用视图

在Entity Framework 4中轻松使用视图
EN

Stack Overflow用户
提问于 2013-07-09 22:09:09
回答 1查看 120关注 0票数 0

我正在visual studio 2012中创建一个webform vb.net项目。我还使用Entity Framework来管理我的对象。最大的痛苦是由我的数据库中的一个View引起的,我被迫使用它。

我可以用这个类从这个视图中检索对象:

代码语言:javascript
复制
Imports System.ComponentModel.DataAnnotations
Public Class C
    <Key, StringLength(6), Display(name:="C")> _
    Public Property IDC() As String
    <Display(Name:="Descrizione"), StringLength(255)> _
    Public Property Descrizione() As String
End Class

现在,我想创建一个名为"S“的全新模型。每个类型为S的对象都应该引用类型为C的对象,因此我的代码是:

代码语言:javascript
复制
Imports System.ComponentModel.DataAnnotations
Public Class S
    <Key, Display(name:="Id")> _
    Public Property SID() As Integer
    <Required, StringLength(255)>
    Public Property Descrizione() As String
    Public Overridable Property Commessa() As Commessa
End Class

不幸的是,当我尝试应用迁移时,该过程失败,因为尝试修改视图以强制执行约束:

代码语言:javascript
复制
ALTER TABLE [dbo].[S] ADD CONSTRAINT [FK_dbo.Ss_dbo.cs_C_IDC] FOREIGN KEY ([C_IDC]) REFERENCES [dbo].[c] ([IDC])

迁移代码为:

代码语言:javascript
复制
    Public Overrides Sub Up()
        CreateTable(
            "dbo.Ss",
            Function(c) New With
                {
                    .SID = c.Int(nullable := False, identity := True),
                    .Descrizione = c.String(nullable := False, maxLength := 255),
                    .C_IDC = c.String(maxLength := 6)
                }) _
            .PrimaryKey(Function(t) t.SID) _
            .ForeignKey("dbo.c", Function(t) t.C_IDC) _
            .Index(Function(t) t.C_IDC)
    End Sub

在context类中定义了正确的视图:

代码语言:javascript
复制
Protected Overrides Sub OnModelCreating(ByVal modelBuilder As DbModelBuilder)
    modelBuilder.Entity(Of C)().ToTable("c")
End Sub

在谷歌上搜索这个问题,我“认为”一种可能性是关闭级联删除功能,但即使使用:

代码语言:javascript
复制
modelBuilder.Entity(Of S).HasRequired(Function(c) c.C).WithMany.WillCascadeOnDelete(False)

迁移尝试修改视图。(上面的代码是否正确?)

可以这样使用实体框架中的视图吗?如何将我将要创建的模型中的对象链接到此视图中的元素?

在这种情况下,实体框架是一种合理的方法吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-07-09 22:33:44

Code First Migrations旨在自动管理您的数据库。如果您的数据库有使完全自动化变得不可能的限制(如视图),您可以:

  1. Disable Code First Migrations
  2. Let EF generate a db update script,但仅应用您需要的部分

关于在Ralph Lavelle's blog上的现有数据库中使用代码优先迁移,有一些很好的一般信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17550444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档