用过VS.NET的朋友应该会发现,在编辑一些文件时VS会在文件下面自动创建它的附属文件.而这些附属 文件往往是根据设计文件生成的代码文件来的.对于我们想实现这样的功能怎办呢?其实MS早就为我们想好 了,只要简单地实现IVsSingleFileGenerator;说是简单不过还是要做些功夫的,就是把编写后 VsSingleFileGenerator注册到共公程序集中,然后在注册表里添加一些东西才行.下面介绍自己实现NClay 实体设计的SingleFileGenerator,有需要的朋友可以参考代码实现自己的SingleFileGenerator:)
实现目的编写XML模型描述后自动生成附属C#代码文件.
XML设计文件:
<?xml version="1.0" encoding="utf-8" ?>
<nclay_models xmlns="http://nclay.cn/model.xsd" namespace="Blogs.Entities">
<class name="User" table="TUser" comment="">
<id name="UserID" type="System.String"/>
<property name="UserName" type="System.String"/>
<property name="UserPWD" type="System.String"/>
<property name="EMail" type="System.String"/>
<property name="Enabled" type="System.String"/>
<property name ="Remark" type="System.String"/>
</class>
</nclay_models>
生成代码模型文件内容:
using System;
using System.Data;
using NClay.Data;
using NClay.Data.Mappings;
[TableMapper(Name="User")]
public partial class User {
private void mUserID;
[PrimaryKey(Name="UserID")]
public virtual void UserID {
get {
return this.mUserID;
}
set {
this.mUserID = value;
}
}
public partial class Mapper : Table {
private ObjectField mAll;
private ObjectField mUserID;
public Mapper() :
base("User") {
this.mAll = new ObjectField("*", this);
this.mUserID = new ObjectField("UserID", this);
}
public virtual ObjectField All {
get {
return this.mAll;
}
}
public virtual ObjectField UserID {
get {
return this.mUserID;
}
}
}
}
public partial class ModelContext {
static User.Mapper mUser = new User.Mapper();
public static User.Mapper User {
get {
return mUser;
}
}
}