Aracılığıyla paylaş


İzlenecek yol: F# türleriyle edmx şema dosyasından (F#) oluşturma

Bu F# 3.0 için izlenecek yol size bir .edmx dosyası içinde belirtilen şema olan Varlık Veri Modeli (EDM) tarafından temsil edilen veri için türler oluşturmayı gösterir. Bu izlenecek yol aynı zamanda EdmxFile tür sağlayıcısının nasıl kullanılacağını gösterir. Başlamadan önce, bir SqlEntityConnection tür sağlayıcısının daha uygun bir tür sağlayıcısı seçeneği olup olmadığını göz önünde bulundurun. SqlEntityConnection tür sağlayıcısı projenizin geliştirme aşamasında bağlanabildiğiniz canlı bir veritabanına sahip olduğunuz, ve bağlantı dizesini derleme zamanında belirlemenizin sorun olmadığı senaryolarda en iyi çalışır. Ancak, bu tür sağlayıcısı EdmxFile tür sağlayıcı kadar çok veritabanı işlevselliğini açığa çıkarmadığı için sınırlıdır. Ayrıca, eğer Varlık Veri Modeli kullanan bir veritabanı için canlı bir veritabanı bağlantısına sahip değilseniz, .edmx dosyasını veritabanıyla kodlamak için kullanabilirsiniz. EdmxFile tür sağlayıcısını kullandığınızda, F# derleyicisi sağladığı türleri üretmek için EdmGen.exe'yi çalıştırır.

Bu izlenecek yol, başarılı olması için bu sırayla gerçekleştirmeniz gereken aşağıdaki görevleri gösterir:

  • Bir EDMX dosyası oluşturma

  • Projeyi oluşturma

  • Varlık Veri Modeli için bağlantı dizesi bulma ya da oluşturma

  • Tür sağlayıcısını yapılandırma

  • Veriyi sorgulama

  • Bir saklı yordamı çağırma

Bir EDMX dosyası oluşturma

Eğer bir EDMX dosyasına zaten sahipseniz, bu adımı atlayabilirsiniz.

Bir EDMX dosyası oluşturmak için

  • Eğer zaten bir EDMX dosyasına sahip değilseniz, bir veritabanı için bir Varlık Veri Modeli ve EDMX dosyası oluşturmak için ADO.NET Varlık Çerçevesi Hızlı Başlangıç içindeki yönergeleri izleyebilirsiniz. Alternatif olarak, bu izlenecek yolun sonundaki Varlık Veri Modeli'ni yapılandırma adımındaki yönergelere başvurabilirsiniz.

Projeyi oluşturma

Bu adımda, bir proje oluşturup EDMX tür sağlayıcısı kullanmak için gerekli başvuruları eklersiniz.

Bir F# projesi oluşturmak ve ayarlamak için

  1. Önceki projeyi kapatın, başka bir proje oluşturun, ve onu SchoolEDM olarak adlandırın.

  2. Solution Explorer içinde, References için kısayol menüsünü açın, ve ardından Add Reference seçin.

  3. Assemblies alanı içinde, Framework düğümünü seçin.

  4. Kullanılabilir derlemeler listesi içinde, System.Data.Entity ve System.Data.Linq derlemelerini seçin, ve ardından bu projenize bu derlemelerin başvurularını eklemek için Add düğmesini seçin.

  5. Assemblies alanı içinde, Extensions düğümünü seçin.

  6. Kullanılabilir uzantılar listesi içinde, FSharp.Data.TypeProviders derlemesine bir başvuru ekleyin.

  7. Uygun ad alanlarını açmak için aşağıdaki kodu ekleyin.

    open System.Data.Linq
    open System.Data.Entity
    open Microsoft.FSharp.Data.TypeProviders
    

Varlık Veri Modeli için bağlantı dizesi bulma ya da oluşturma

Varlık Veri Modeli için bağlantı dizesi (EDMX bağlantı dizesi) veritabanı için bağlantı dizesinin yanı sıra ayrıca ek bilgi de içerir. Örneğin, basit bir SQL Server veritabanı için EDMX bağlantı dizesi aşağıdaki koda benzer.

let edmConnectionString = "metadata=res://*/;provider=System.Data.SqlClient;Provider Connection String='Server=SERVER\Instance;Initial Catalog=DatabaseName;Integrated Security=SSPI;'"

EDMX bağlantı dizeleri hakkında daha fazla bilgi için, bkz: Connection Strings.

Varlık Veri Modeli için bağlantı dizesi bulmak ya da oluşturmak için

  • EDMX bağlantı dizelerini elle üretmek zor olabilir, bu nedenle onu programlı olarak üretmek size zaman kazandırabilir. Eğer EDMX bağlantı dizenizi biliyorsanız, bu adımı atlayarak bir sonraki adımda o dizeyi kullanabilirsiniz. Aksi takdirde, sağladığınız bir veritabanı bağlantı dizesinden EDMX bağlantı dizesi üretmek için aşağıdaki kodu kullanın.

    open System
    open System.Data
    open System.Data.SqlClient
    open System.Data.EntityClient
    open System.Data.Metadata.Edm
    
    let getEDMConnectionString(dbConnectionString) =
        let dbConnection = new SqlConnection(connectionString)
        let resourceArray = [| "res://*/" |]
        let assemblyList = [| System.Reflection.Assembly.GetCallingAssembly() |]
        let metaData = MetadataWorkspace(resourceArray, assemblyList)
        new EntityConnection(metaData, dbConnection)
    

Tür sağlayıcısını yapılandırma

Bu adımda, tür sağlayıcısını EDMX bağlantı dizesi ile oluşturur ve yapılandırırsınız, ve .edmx dosyası içinde tanımlanan şema için türler üretirsiniz.

Tür sağlayıcısını yapılandırmak ve türleri üretmek için

  1. Bu izlenecek yolun ilk adımında ürettiğiniz .edmx dosyasını proje dosyanız içine kopyalayın.

  2. F# projeniz içindeki proje düğümünüz için kısayol menüsünü açın, Add Existing Item seçin, ve ardından .edmx dosyasını seçerek projenize ekleyin.

  3. .edmx dosyanız için tür sağlayıcısını etkinleştirmek için aşağıdaki kodu girin. Server\Instance yerine SQL Server çalıştıran sunucunuzun adını ve örneğinizin adını girin, ve bu izlenecek yolun ilk adımındaki .edmx dosyanızın adını kullanın.

    type edmx = EdmxFile<"Model1.edmx", ResolutionFolder = @"<folder that contains your .edmx file>>
    
    let edmConnectionString =
        getEDMConnectionString("Data Source=SERVER\instance;Initial Catalog=School;Integrated Security=true;")
    let context = new edmx.SchoolModel.SchoolEntities(edmConnectionString)
    

Veriyi sorgulama

Bu adımda, veritabanını sorgulamak için F# sorgu iadelerini kullanırsınız.

Verileri sorgulamak için

  • Varlık veri modeli içindeki veriyi sorgulamak için aşağıdaki kodu girin.

    query { for course in context.Courses do
            select course }
    |> Seq.iter (fun course -> printfn "%s" course.Title)
    
    query { for person in context.Person do
            select person }
    |> Seq.iter (fun person -> printfn "%s %s" person.FirstName person.LastName)
    
    // Add a where clause to filter results
    query { for course in context.Courses do
            where (course.DepartmentID = 1)
            select course)
    |> Seq.iter (fun course -> printfn "%s" course.Title)
    
    // Join two tables
    query { for course in context.Courses do
            join (for dept in context.Departments -> course.DepartmentID = dept.DepartmentID)
            select (course, dept.Name) }
    |> Seq.iter (fun (course, deptName) -> printfn "%s %s" course.Title deptName)
    

Bir saklı yordamı çağırma

EDMX tür sağlayıcısını kullanarak saklı yordamları çağırabilirsiniz. Aşağıdaki yordamda, School veritabanı sütunlar için yeni değerler verildiğinde bir kaydı güncelleyen bir saklı yordam, UpdatePerson, içerir. Bu saklı yordamı DataContext türü üzerinde bir yöntem olarak açığa çıkarıldığı için kullanabilirsiniz.

Bir saklı yordamı çağırmak için

  • Kayıtları güncelleştirmek için aşağıdaki kodu ekleyin.

    // Call a stored procedure.
    let nullable value = new System.Nullable<_>(value)
    
    // Assume now that you must correct someone's hire date.
    // Throw an exception if more than one matching person is found.
    let changeHireDate(lastName, firstName, hireDate) =
    
        query { for person in context.People do
                where (person.LastName = lastName &&
                       person.FirstName = firstName)
                exactlyOne }
        |> (fun person ->
                context.UpdatePerson(nullable person.PersonID, person.LastName,
                    person.FirstName, nullable hireDate, person.EnrollmentDate))
    
    changeHireDate("Abercrombie", "Kim", DateTime.Parse("1/12/1998"))
    |> printfn "Result: %d"
    

    Eğer başarılı olursanız sonuç 1'dir. Yalnızca tek bir sonucun döndürüldüğünden emin olmak için sorgu ifadesi içinde exactlyOne kullanıldığında dikkat edin, aksi halde, bir özel durum harekete geçirilir. Ayrıca, null olabilen değerlerle daha kolay çalışmak için, sıradan bir değerden bir null olabilen değer oluşturmak için bu kod içinde tanımlanan basit nullable işlevini kullanabilirsiniz.

Varlık Veri Modeli'ni yapılandırma

Bu yordamı yalnızca bir veritabanından tam bir Varlık Veri Modeli üretmeyi öğrenmek istiyorsanız ve sınayacağınız bir veritabanınız yok ise tamamlayın.

Varlık Veri Modeli'ni yapılandırmak için

  1. Bir veri tabanı oluşturmak için, menü çubuğu üzerinde SQL, Transact-SQL Editor, New Query seçin. Eğer istenirse, veritabanı sunucunuzu ve örneğinizi belirtin.

  2. Student veritabanını oluşturan veritabanı betiğinin içeriğini, Creating the School Sample Database açıkladığı gibi, kopyalayıp yapıştırın.

    Bu izlenecek yolun sonraki adımları ADO.NET Entity Data Model Quickstart temel alır.

  3. Üçgen simgesi olan araç çubuğu düğmesini seçerek ya da Ctrl+Q tuşlarını seçerek SQL betiğini çalıştırın.

  4. Server Explorer içinde, Data Connections için kısayol menüsünü açın, Add Connection seçin, ve ardından veritabanı sunucusunun adını, örnek adının adını, ve School veritabanını girin.

  5. Bir C# ya da Visual Basic Konsol Uygulaması projesi oluşturun, onun kısayol menüsünü açın, Add New Item seçin, ve ardından ADO.NET Entity Data Model seçin.

    Varlık Veri Modeli Sihirbazı açılır. Bu sihirbazı kullanarak, Varlık Veri Modeli'ni nasıl oluşturmak istediğinizi seçebilirsiniz.

  6. Choose Model Contents altında, Generate from database onay kutusunu seçin.

  7. Sonraki sayfada, veri bağlantısı olarak yeni oluşturulan School veritabanınızı seçin.

    Bu bağlantı <servername>.<instancename>.School.dbo benzemelidir.

  8. Varlık bağlantı dizenizi Panoya kopyalayın çünkü bu dize daha sonra önemli olabilir.

  9. Varlık bağlantı dizesini App.Config dosyasına kaydetme onay kutusunun seçili olduğundan emin olun, ve daha sonra eğer gerekirse bağlantı dizesini konumlandırmanıza yardımcı olacak metin kutusu içindeki dize değerini not alın.

  10. Sonraki sayfada, Tables ve Stored Procedures and Functions seçin.

    En üst düzey düğümerli seçerek, tüm tabloları, saklı yordamları ve işlevleri seçersiniz. Eğer isterseniz bunları tek tek de seçebilirsiniz.

  11. Diğer seçenekler için onay kutularının seçili olduğundan emin olun.

    İlk Pluralize or singularize generated object names onay kutusu veritabanı tablolarını temsil eden nesneleri adlandırmadaki kurallara uymak için tekil biçimlerin çoğula değiştirilip değiştirilmeyeceğini belirtir. Include foreign key columns in the model onay kutusu amacı veritabanı şeması için üretilen nesne türleri içindeki diğer alanlarla birleştirilmek olan alanların içerilip içerilmeyeceğini belirler. Üçüncü onay kutusu model içinde saklı yordamların ve işlevlerin içerilip içerilmeyeceğini belirtir.

  12. School veritabanını temel alan bir Varlık Veri Modeli'ni içeren bir .edmx dosyası üretmek için Finish düğmesini seçin.

    Bir dosya, Model1.edmx, projenze eklenir, ve bir veritabanı diyagramı belirir.

  13. Menü çubuğu üzerinde, modelin tüm detaylarını görüntülemek için View, Other Windows, Entity Data Model Browser seçin, ya da üretilen nesne modelinin veritabanı tabloları ve sütunları ile nasıl eşleştiğini gösteren bir pencere açmak için Entity Data Model Mapping Details seçin.

Sonraki Adımlar

Diğer sorguları Sorgu ifadelerini (F#) içinde listelenen kullanılabilir sorgu işleçlerine bakarak keşfedin.

Ayrıca bkz.

Görevler

İzlenecek yol: türü sağlayıcıları ve varlıkların (F#) kullanarak bir sql veritabanına erişme

Başvuru

EdmxFile türü sağlayıcı (F#)

Diğer Kaynaklar

Sağlayıcı türü

ADO.NET Entity Framework

.edmx File Overview (Entity Framework)

Edm Generator (EdmGen.exe)