当我尝试使用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>();
有没有办法实现这个目标? (抱歉我的英语不好)。
答案 0 :(得分:1)
这里的问题是Simple.Data使用自己的内部别名来处理With子句。这是我在下一次迭代中可以看到的内容,但现在显而易见的答案是重命名列,这样它们就不会以它们所在表的名称作为前缀。如果表列的名称与属性,然后你不需要别名,一切都会工作。
无论如何,列前缀背后的想法是什么?