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 は合理的なアプローチですか?
ありがとう!