如何以编程方式生成 CSDL 和 MSL 文件?
How to generate CSDL and MSL files programmatically?
我正在尝试使用 C# 语言实现动态 ORM 模型生成。由于工作任务,我需要这个。
我已经了解了如何在 C# 中以编程方式创建 SSDL 文件。我正在使用 EntityStoreSchemaGenerator
class,它是这样写数据的:
var store = new EntityStoreSchemaGenerator(providerInvariantName, connectionString, "ShoppingModel");
store.GenerateStoreMetadata();
store.WriteStoreSchema(filePath);
我可以给你看我得到的示例 SSDL 文件:http://pastebin.com/3U4A6fY9
没关系,但是如何获取 CSDL 和 MSL 文件?
据我了解,需要使用 EntityModelSchemaGenerator
class 从 System.Data.Entity.Design
命名空间生成 CSDL 和 MSL 文件以达到此目的。
有两种方法:
- WriteModelSchema(String) 将生成的概念架构定义语言 (CSDL) 写入指定文件。
- WriteModelSchema(XmlWriter) 将生成的概念架构定义语言 (CSDL) 写入 XmlWriter 对象。
- WriteStorageMapping(String) 将生成的映射规范语言 (MSL) 写入指定文件。
- WriteStorageMapping(XmlWriter) 将生成的映射规范语言 (MSL) 写入 XmlWriter 对象。
可用于生成所需文件 (CSDL && MSL)。
但我很困惑......如何生成它们,如果 EntityModelSchemaGenerator
构造函数需要 System.Data.Metadata.Edm.EntityContainer
.
据我了解,我必须使用 EntityConnection
class.
准备一些实体容器
但是,如果我的目标是创建 *.csdl 和 *.以前的 msl 文件?
所以在创建所有元数据文件之前我不能使用 EntityModelSchemaGenerator
?那么创建*.csdl和*.msl文件的方法是什么(*.ssdl文件就搞定了)?
我已经使用
解决了我的问题
Models = new EntityModelSchemaGenerator(Store.StoreItemCollection, "ShoppingModelConceptual", "ShoppingModelConceptualContainer");
这是基于之前准备的商店物品集合。
using System;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.Entity;
using System.Data.EntityClient;
using System.Data.Entity.Design;
using System.Data.Entity.Infrastructure;
namespace DynamicOrm1
{
class Generators
{
internal EntityModelSchemaGenerator Models { get; set; }
internal EntityClassGenerator Classes { get; set; }
internal EntityCodeGenerator Code { get; set; }
internal EntityViewGenerator Views { get; set; }
internal EntityStoreSchemaGenerator Store { get; set; }
const string connectionString = "Server = MSSQL2014; Database = test.shop; Trusted_Connection = True;";
const string providerInvariantName = "System.Data.SqlClient";
public Generators()
{
InitializeSettings();
}
private void InitializeSettings()
{
Classes = new EntityClassGenerator(LanguageOption.GenerateCSharpCode);
Code = new EntityCodeGenerator(LanguageOption.GenerateCSharpCode);
Views = new EntityViewGenerator(LanguageOption.GenerateCSharpCode);
Store = new EntityStoreSchemaGenerator(providerInvariantName, connectionString, "ShoppingModelStore");
Store.GenerateForeignKeyProperties = true;
}
internal void CreateSsdlFile(string filePath)
{
if (filePath == String.Empty)
throw new Exception("Can't create the SSDL file, because the given file path is an empty string.");
Store.GenerateStoreMetadata();
Store.WriteStoreSchema(filePath);
}
internal void CreateCsdlAndMslFile(string csdlFilePath, string mslFilePath)
{
if (Store == null)
throw new Exception("Can't create the CSDL and MSL files, because the `Store` object is null.");
Models = new EntityModelSchemaGenerator(Store.StoreItemCollection, "ShoppingModelConceptual", "ShoppingModelConceptualContainer");
Models.GenerateMetadata();
Models.WriteModelSchema(csdlFilePath);
Models.WriteStorageMapping(mslFilePath);
}
}
class Program
{
private static Generators EntityGenerators { get; set; }
[STAThread]
static void Main()
{
try
{
EntityGenerators = new Generators();
EntityGenerators.CreateSsdlFile(@"\shopping.ssdl.xml");
EntityGenerators.CreateCsdlAndMslFile(@"\shopping.csdl.xml", @"\shopping.msl.xml");
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
}
}
}
我正在尝试使用 C# 语言实现动态 ORM 模型生成。由于工作任务,我需要这个。
我已经了解了如何在 C# 中以编程方式创建 SSDL 文件。我正在使用 EntityStoreSchemaGenerator
class,它是这样写数据的:
var store = new EntityStoreSchemaGenerator(providerInvariantName, connectionString, "ShoppingModel");
store.GenerateStoreMetadata();
store.WriteStoreSchema(filePath);
我可以给你看我得到的示例 SSDL 文件:http://pastebin.com/3U4A6fY9
没关系,但是如何获取 CSDL 和 MSL 文件?
据我了解,需要使用 EntityModelSchemaGenerator
class 从 System.Data.Entity.Design
命名空间生成 CSDL 和 MSL 文件以达到此目的。
有两种方法:
- WriteModelSchema(String) 将生成的概念架构定义语言 (CSDL) 写入指定文件。
- WriteModelSchema(XmlWriter) 将生成的概念架构定义语言 (CSDL) 写入 XmlWriter 对象。
- WriteStorageMapping(String) 将生成的映射规范语言 (MSL) 写入指定文件。
- WriteStorageMapping(XmlWriter) 将生成的映射规范语言 (MSL) 写入 XmlWriter 对象。
可用于生成所需文件 (CSDL && MSL)。
但我很困惑......如何生成它们,如果 EntityModelSchemaGenerator
构造函数需要 System.Data.Metadata.Edm.EntityContainer
.
据我了解,我必须使用 EntityConnection
class.
但是,如果我的目标是创建 *.csdl 和 *.以前的 msl 文件?
所以在创建所有元数据文件之前我不能使用 EntityModelSchemaGenerator
?那么创建*.csdl和*.msl文件的方法是什么(*.ssdl文件就搞定了)?
我已经使用
解决了我的问题Models = new EntityModelSchemaGenerator(Store.StoreItemCollection, "ShoppingModelConceptual", "ShoppingModelConceptualContainer");
这是基于之前准备的商店物品集合。
using System;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.Entity;
using System.Data.EntityClient;
using System.Data.Entity.Design;
using System.Data.Entity.Infrastructure;
namespace DynamicOrm1
{
class Generators
{
internal EntityModelSchemaGenerator Models { get; set; }
internal EntityClassGenerator Classes { get; set; }
internal EntityCodeGenerator Code { get; set; }
internal EntityViewGenerator Views { get; set; }
internal EntityStoreSchemaGenerator Store { get; set; }
const string connectionString = "Server = MSSQL2014; Database = test.shop; Trusted_Connection = True;";
const string providerInvariantName = "System.Data.SqlClient";
public Generators()
{
InitializeSettings();
}
private void InitializeSettings()
{
Classes = new EntityClassGenerator(LanguageOption.GenerateCSharpCode);
Code = new EntityCodeGenerator(LanguageOption.GenerateCSharpCode);
Views = new EntityViewGenerator(LanguageOption.GenerateCSharpCode);
Store = new EntityStoreSchemaGenerator(providerInvariantName, connectionString, "ShoppingModelStore");
Store.GenerateForeignKeyProperties = true;
}
internal void CreateSsdlFile(string filePath)
{
if (filePath == String.Empty)
throw new Exception("Can't create the SSDL file, because the given file path is an empty string.");
Store.GenerateStoreMetadata();
Store.WriteStoreSchema(filePath);
}
internal void CreateCsdlAndMslFile(string csdlFilePath, string mslFilePath)
{
if (Store == null)
throw new Exception("Can't create the CSDL and MSL files, because the `Store` object is null.");
Models = new EntityModelSchemaGenerator(Store.StoreItemCollection, "ShoppingModelConceptual", "ShoppingModelConceptualContainer");
Models.GenerateMetadata();
Models.WriteModelSchema(csdlFilePath);
Models.WriteStorageMapping(mslFilePath);
}
}
class Program
{
private static Generators EntityGenerators { get; set; }
[STAThread]
static void Main()
{
try
{
EntityGenerators = new Generators();
EntityGenerators.CreateSsdlFile(@"\shopping.ssdl.xml");
EntityGenerators.CreateCsdlAndMslFile(@"\shopping.csdl.xml", @"\shopping.msl.xml");
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
}
}
}