0

Database.SetInitializer を使用してデータベースを初期化しようとしていますが、イニシャライザ クラスが DBContext から継承すると、「型引数が制約型 'System.Data.Entity.DBContext から継承または実装されていません」というエラーが発生します。何か案は?ちなみに、Code First EF は初めてです。

コンテキスト クラス:

Imports System.Data.Entity
Imports System.Collections.Generic
Imports System.Data.Entity.Infrastructure
Imports System.Configuration

Public Class PropertyManagementContext
    Inherits DbContext

#Region "Constructor"
    Public Sub New()
        MyBase.New("Data Source=WSBS2K3SQL;Initial Catalog=AQUARIUS_TEST;Persist    Security Info=True;User ID=SomeUser;Password=SomePassword;")

    End Sub

#End Region

#Region "Tables"
    Public Complexes As DbSet(Of Complex)
    Public Buildings As DbSet(Of Building)
    Public Units As DbSet(Of Unit)
    Public Tenants As DbSet(Of Tenant)
#End Region

Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
    MyBase.OnModelCreating(modelBuilder)

    'Set the Primary Keys
    modelBuilder.Entity(Of Complex).HasKey(Function(c) c.ComplexId)
    modelBuilder.Entity(Of Building).HasKey(Function(b) b.BuildingId).HasKey(Function(b) b.ComplexId)
    modelBuilder.Entity(Of Unit).HasKey(Function(u) u.UnitId).HasKey(Function(u) u.BuildingId)
    modelBuilder.Entity(Of Tenant).HasKey(Function(t) t.TenantId)

    'Set Complex Primary Key to Identity(MS SQL Auto-Increment)
    modelBuilder.Entity(Of Complex).Property(Function(c) c.ComplexId) _
    .HasDatabaseGeneratedOption(ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)

End Sub

End Class

初期化クラス:

Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Data.Entity

Public Class PropertyManagementInitializer
    Inherits DropCreateDatabaseAlways(Of PropertyManagementContext)

Protected Overrides Sub Seed(context As PropertyManagementContext)
    MyBase.Seed(context)

    Dim complex As New Complex With {
        .Name = "SomeComplex",
        .City = "SomeCity",
        .Address = "SomeStreet",
        .PostalCode = "R2R2R2",
        .Type = "1"
    }
    context.Complexes.Add(complex)

    context.SaveChanges()

End Sub

End Class

Database.SetInitializer() が呼び出され、エラーが発生するメイン フォーム:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Try    
        Database.SetInitializer(Of PropertyManagementContext)(New PropertyManagementInitializer)

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub
4

1 に答える 1

3

私はこれを以前に見たことがありますが、Visual Studio は面白い方法で修正したようで、「Inherits DbContext」を削除してビルドを実行し、「Inherits DbContext」を追加してソリューションを再度ビルドしましたが、Visual Studio は文句を言いませんでした。

于 2012-10-25T04:36:58.090 に答える