如何展平Linq-To-Sql表映射?

时间:2009-12-19 22:29:44

标签: c# linq-to-sql mapping denormalization

我在POCO类和我的数据库之间有一个Linq-To-Sql映射。我希望能够在我的类上添加属性,这些属性表示比简单的scalr值稍微复杂的构造。

例如,我有一个自定义结构类型,它包含两个简单的标量值。我不想再创建另一个表,然后添加一个FK作为属性。是否可以使用Linq-to-Sql XML映射文件映射此结构的属性?

例如,

public class Foo
{
    public string Blah { get; set; }
    public Bar Yada { get; set; }
}

public struct Bar
{
    public int A { get; set; }
    public int B { get; set; }
}

我如何指定BlahYada.AYada.B都作为Foo表上的列保留?

甚至可以这样做吗?

2 个答案:

答案 0 :(得分:1)

我认为.NET4中的实体框架是完成此任务所必需的。有关复杂类型和实体的信息,请参阅this blog post

答案 1 :(得分:1)

这真的很蹩脚,但听起来如果我坚持使用L2S可能需要做的事情。

public class Foo
{
    public string Blah { get; set; }

    public int Bar_A { get; set; }
    public int Bar_B { get; set; }

    /* not mapped to DB */
    public Bar Yada
    {
        get { return new Bar { A = this.Bar_A, B = this.Bar_B }; }
        set { this.Bar_A = value.A; this.Bar_B = value.B; }
    }
}

public struct Bar
{
    public int A { get; set; }
    public int B { get; set; }
}

当然,在实际代码中,我可能会这样做,因为它不是一遍又一遍地创建值,因为我的真实Bar类型比简单地包含值更多。