【问题标题】:How to flatten Linq-To-Sql table mappings?如何展平 Linq-To-Sql 表映射?
【发布时间】:2010-12-28 09:42:43
【问题描述】:

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

例如,我有一个自定义结构类型,它包含两个简单的标量值。我不想把它变成另一个表,然后添加一个 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 表中保留?

这还能做到吗?

【问题讨论】:

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


    【解决方案1】:

    我认为 .NET4 中的实体框架是完成这项工作所必需的。有关复杂类型和实体,请参阅 this blog post

    【讨论】:

    • 感谢您的提示。我真的希望为这个小应用程序坚持使用 LINQ-to-SQL。如果我跳到 EF,我真的不得不退后一步,看看 NHibernate 和其他人。
    【解决方案2】:

    这真的很蹩脚,但听起来如果我坚持使用 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 类型不仅仅包含值。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      相关资源
      最近更新 更多