如何使用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。

思考?并提前感谢。

有帮助吗?

解决方案

我有想法我们有一个二进制嗅探器 - 事实证明它没有做到这一点。我需要补充一点 - 如果你不介意我们拥有什么并添加它,那就更好了 - 我会爱你的。在我们的扩展程序中获取一些战利品 - 你想修改ToDataTable()(我认为)......

如果你没有机会 - 我会在下次启动SimpleRepo时加上这个......

其他提示

我刚刚遇到了Binary专栏问题。如果你有补丁/修复我愿意测试它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top