如何使用 SubSonic 的 Schema builder 在数据库中创建二进制列?
所以今晚我决定潜入 SubSonic。我在这里看到了很多问题以及 Rob 和其他许多人的精彩回应。我看到 SubSonic 是一个 ORM,使用 T4 模板它可以从现有数据库中生成一些非常漂亮和高效的类。
但是,我想走另一条路。我有一个非常丰富的域,并且想使用 SubSonic 和 RunMigrations 选项从我的域临时创建表。
一切都运行得非常好(甚至编写了我自己的 Upgrade() 函数,该函数根据程序集修订号检测代码库是否有更改,然后将所有对象更新迁移到数据库 - 对于自动升级数据库来说非常巧妙和有效)。
但是,您如何让 SubSonic 创建二进制列?也许我没有按预期使用它(我没有使用 Query 或 SqlQuery,只是 SimpleRepository 的 Linq 接口)。见下文(使用常见的“博客文章”示例):
[SubsonicTable]
public class Post
{
[SubSonicPrimaryKey]
public Int32 PostID { get; set; }
[SubSonicStringLength(1024)]
public String Title { get; set; }
[SubSonicLongString]
public String Body { get; set; }
[SubSonicStringLength(5)]
public String? LangaugeCode { get; set; }
public DateTime? Published { get; set; }
public PostType PostType { get; set; }
public Int32 PostTypeID
{
get
{
return this.PostType.GetHashCode();
}
set
{
Enum.Parse(typeof(PostType), value.ToString());
}
}
public Byte[] Image { get; set; }
}
public enum PostType
{
NotSet = 0
,BlogPost
,Comment
,Trackback
,Pingback
}
当通过 SimpleRepository 保存或查询此 Post 对象时,它缺少两列:PostType(或类型为枚举 PostType)和 Image(类型为 byte[] 数组)。
现在,我在这里找到了有人发布的关于使用 Int32 PostTypeID 解决枚举问题的 hack-of-an-answer。来吧 Rob,SubSonic 应该能够支持 INT 的枚举类型,并从它们返回。;) 这就是我拥有 PostTypeID 的原因,它会被正确创建和编写。
这是为我创建 Post 表以及插入第一个帖子的命令示例:
Post p = new Post();
p.Title = "My Title";
p.Body = "The body of the post.";
p.PostType = PostType.BlogPost;
var repo = new SimpleRepository(SimpleRepositoryOptions.RunMigrations);
repo.Add(p);
注意:您不应该在生产中使用此代码,因为 RunMigrations 在第一次运行时有很多额外的 TSQL 查询。
您可以从上面的示例中看到,如果 Posts 表不存在,这将创建它,并创建列。
但是,这不会创建上面提到的两列:PostType 和 Image。
想法?并提前感谢。