एफ # टीम से कुछ मदद के बाद मैंने अपनी समस्या हल की। यह जो मैंने किया है।
namespace Types
open System
open System.Data
open System.IO
open System.Linq
open System.Data.Linq
open Microsoft.FSharp.Data.TypeProviders
open Microsoft.FSharp.Linq
open Microsoft.FSharp.TypeProvider.Emit
open Microsoft.FSharp.Core.CompilerServices
type DatabaseSchema =
SqlDataConnection<"Data Source=(local);Initial Catalog=Test;Integrated Security=SSPI;">
[<TypeProvider>]
type public MeasureTypeProvider(cfg:TypeProviderConfig) as this =
inherit TypeProviderForNamespaces()
let assembly = System.Reflection.Assembly.GetExecutingAssembly()
let typesNamespace = "Types.Domain"
let providedTypeBuilder = ProvidedTypeBuilder.Default
let db = DatabaseSchema.GetDataContext()
let types =
query { for m in db.Table do select m }
|> Seq.map(fun dataEntity ->
let className:string = dataEntity.Identifier
let providedTypeDefinition =
ProvidedTypeDefinition(className = className,
baseType = Some typeof<obj>,
IsErased=false)
providedTypeDefinition.AddMember(
ProvidedConstructor([], InvokeCode = fun [] -> <@@ obj() @@>))
providedTypeDefinition
) |> Seq.toList
let rootType =
let providedTypeDefinition =
ProvidedTypeDefinition(assembly,
typeNamespace,
"DomainTypes",
Some typeof<obj>,
IsErased=false)
providedTypeDefinition.AddMembersDelayed(fun() -> types)
this.AddNamespace(typesNamespace, [providedTypeDefinition])
providedTypeDefinition
let path = Path.GetDirectoryName(assembly.Location) + @"\GeneratedTypes.dll"
do rootMeasureType.ConvertToGenerated(path)
[<assembly:TypeProviderAssembly>]
do()
टाइपप्रोवाइडर। फ्रेम फ्रेम स्वचालित रूप से जेनरेट की गई असेंबली को साफ़ करता है। यदि आप इसे चारों ओर चिपकाना चाहते हैं तो निम्न कथन पर टिप्पणी करें।
File.Delete assemblyFileName
एक अन्य पकड़ लिया मैंने पाया कि जब मैं प्रकार है कि मूल्य प्रकार से निकाले जाते हैं प्रदान करने में सक्षम था (दशमलव) की तरह जब IsErased = सच है, मैं नहीं जब IsErased = false इन व्युत्पन्न प्रकार प्रदान करने में सक्षम था। ऐसा इसलिए है क्योंकि मूल्य प्रकारों को बंद कर दिया गया है, इसलिए एक "वास्तविक" प्रकार उत्पन्न करना संभव नहीं है जो किसी मान प्रकार से प्राप्त होता है।
स्रोत
2012-04-21 01:15:08
आपको अद्यतन को एक उत्तर के रूप में पोस्ट करना चाहिए। यह भविष्य के आगंतुकों के लिए सहायक होगा। – pad