转换为具有相同名称属性的对象

时间:2014-05-23 21:31:24

标签: simple.data

当我尝试使用Bar属性转换为类Foo时,我遇到了问题。类Bar的属性与类Foo的属性具有相同的名称:

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Bar Bar { get; set; }
}

public class Bar
{
    public int Id { get; set; }
    public string Name { get; set; }
}

数据库架构如下所示:

CREATE TABLE dbo.TB_Foo
(
    foo_Id INT PRIMARY KEY
    ,foo_Name NVARCHAR(20)
)
GO

CREATE TABLE dbo.TB_Bar
(
    bar_Id INT PRIMARY KEY
    ,bar_Name NVARCHAR(20)
    ,bar_FooId INT 

    ,FOREIGN KEY(bar_FooId) REFERENCES dbo.TB_Foo(foo_Id)
)
GO

示例数据:

INSERT INTO dbo.TB_Foo(foo_Id, foo_Name) 
    VALUES (1, 'Foo1'), (2, 'Foo2'), (3, 'Foo3')

INSERT INTO dbo.TB_Bar(bar_Id, bar_Name, bar_FooId) 
    VALUES (1, 'Bar1', 1), (2, 'Bar2', 2), (3, 'Bar3', 3)

当我尝试使用Simple.Data转换为对象时,我得到异常:

" System.ArgumentException:具有相同键的项目已经加入"

dynamic barAlias;

List<Foo> list = db.TB_Foo
    .All()
    .With(db.TB_Foo.TB_Bar.As("Bar"), out barAlias)
    .Select(
        // Columns for properties of class Foo
        db.TB_Foo.foo_Id.As("Id"),
        db.TB_Foo.foo_Name.As("Name"),

        // Columns for properties of class Bar
        barAlias.bar_Id.As("Id"),
        barAlias.bar_Name.As("Name") 
    )
    .ToList<Foo>();

有没有办法实现这个目标? (抱歉我的英语不好)。

1 个答案:

答案 0 :(得分:1)

这里的问题是Simple.Data使用自己的内部别名来处理With子句。这是我在下一次迭代中可以看到的内容,但现在显而易见的答案是重命名列,这样它们就不会以它们所在表的名称作为前缀。如果表列的名称与属性,然后你不需要别名,一切都会工作。

无论如何,列前缀背后的想法是什么?