0

Visual Studio 2012 で webform vb.net プロジェクトを作成しています。また、オブジェクトを管理するために Entity Framework を使用しています。大きな苦痛は、私が使用せざるを得ないデータベースのビューによって引き起こされます。

このクラスを使用して、このビューからオブジェクトを取得できます。

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 のオブジェクトを参照する必要があるため、私のコードは次のとおりです。

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

残念ながら、移行を適用しようとすると、ビューを変更して制約を適用しようとするため、プロセスが失敗します。

ALTER TABLE [dbo].[S] ADD CONSTRAINT [FK_dbo.Ss_dbo.cs_C_IDC] FOREIGN KEY ([C_IDC]) REFERENCES [dbo].[c] ([IDC])

移行コードは次のとおりです。

    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

コンテキスト クラスでは、正しいビューが定義されています。

Protected Overrides Sub OnModelCreating(ByVal modelBuilder As DbModelBuilder)
    modelBuilder.Entity(Of C)().ToTable("c")
End Sub

この問題をグーグルで検索すると、カスケード削除機能をオフにする可能性が「あると思います」が、次の場合でも:

modelBuilder.Entity(Of S).HasRequired(Function(c) c.C).WithMany.WillCascadeOnDelete(False)

移行はビューを変更しようとします。(上記のコードは正しいですか?)

このように Entity Framework でビューを使用することは可能ですか? 作成するモデルのオブジェクトをこのビューの要素にリンクするにはどうすればよいですか?

このシナリオでは、Entity Framework は合理的なアプローチですか?

ありがとう!

4

1 に答える 1