如何使用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来解决枚举问题。来吧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。
思考?并提前感谢。
答案 0 :(得分:4)
我有想法我们有一个二进制嗅探器 - 事实证明它没有做到这一点。我需要补充一点 - 如果你不介意我们拥有什么并添加它,那就更好了 - 我会爱你的。在我们的扩展程序中获取一些战利品 - 你想修改ToDataTable()(我认为)......
如果你没有机会 - 我会在下次启动SimpleRepo时加上这个......
答案 1 :(得分:0)
我刚刚遇到了Binary专栏问题。如果你有补丁/修复我愿意测试它。