在旧数据库中,NULL
值有时存储为字符串NULL和/或“x”。
如何告诉EF我希望它自动将这些“占位符值”转换为NULL
?
更新:
我希望通过两次使用相同的属性来避免模型中的模糊/偶然复杂性。 (如果人们可以获得/设置LegacyColumn
,他们就会和抽象被破坏了)
答案 0 :(得分:3)
您可以根据未映射到数据库并执行所需转换的现有属性创建新属性。假设该列名为Foo
,您可以使用以下代码:
[Column("Foo")]
public String FooWithWeirdNullValues { get; set; }
[NotMapped]
public String Foo {
get {
return FooWithWeirdNullValues == "NULL" || FooWithWeirdNullValues == "x"
? null : FooWithWeirdNullValues;
}
set { FooWithWeirdNullValues = value; }
}
在您的代码中,您可以使用未映射的属性来访问Foo
列的值。
您可能想为FooWithWeirdNullValues
选择其他名称,例如LegacyFoo
或其他什么。只要您使用Column
属性将其映射到数据库中的正确列,就可以选择任何名称。
如果需要,您可以将FooWithWeirdNullValues
设为私有,以免污染您的模型。这需要对DbContext
进行一些更改,如an answer on Stack Overflow on how to map private properties using code first中所述。