Como achatar os mapeamentos de tabela Linq para SQL?
-
20-09-2019 - |
Pergunta
Eu tenho um mapeamento LINQ para SQL entre as classes POCO e meu banco de dados. Quero poder adicionar propriedades às minhas classes que representam construções um pouco mais complexas do que os valores simples do SCALR.
Por exemplo, eu tenho um tipo de estrutura personalizado que contém dois valores escalares simples. Não quero fazer desta outra tabela e depois adicionar um FK como propriedade. É possível mapear as propriedades desta estrutura usando o arquivo de mapeamento LINQ para SQL XML?
Por exemplo,
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; }
}
Como eu especificaria isso Blah
, Yada.A
, e Yada.B
são todos persistidos como colunas no Foo
tabela?
Isso pode ser feito?
Solução 2
Isso é realmente coxo, mas parece que pode ser o que eu tenho que fazer se eu continuar com 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; }
}
Obviamente, no código real, eu provavelmente conseguiria tal que não estava criando o valor repetidamente porque meu real Bar
O tipo tem mais do que simplesmente conter os valores.
Outras dicas
Eu acho que a estrutura da entidade no .NET4 é necessária para fazer isso. Ver esta postagem do blog em tipos e entidades complexas.