在我的领域中,NULL和空字符串之间没有重要区别。如何让EF忽略两者之间的差异,并始终将空字符串保留为NULL?
发布于 2011-06-14 15:46:32
空字符串不是string属性的默认值,因此这意味着您的代码在某个地方设置了空字符串。在这种情况下,您有责任处理它。
如果您先在POCOs中使用代码,则可以使用自定义setter:
private string _myProperty;
public string MyProperty
{
get { return _myProperty; }
set
{
if (value == String.Empty)
{
_myProperty = null;
}
else
{
_myProperty = value;
}
}
}发布于 2012-02-08 11:17:52
下面是我放在DbContext子类中的一个函数,它用null替换空字符串或空白字符串。
我仍然没有对其进行优化,因此任何性能提示都将非常感谢。
private const string StringType = "String";
private const EntityState SavingState = EntityState.Added | EntityState.Modified;
public override int SaveChanges()
{
var objectContext = ((IObjectContextAdapter)this).ObjectContext;
var savingEntries =
objectContext.ObjectStateManager.GetObjectStateEntries(SavingState);
foreach (var entry in savingEntries)
{
var curValues = entry.CurrentValues;
var fieldMetadata = curValues.DataRecordInfo.FieldMetadata;
var stringFields = fieldMetadata.Where(f =>
f.FieldType.TypeUsage.EdmType.Name == StringType);
foreach (var stringField in stringFields)
{
var ordinal = stringField.Ordinal;
var curValue = curValues[ordinal] as string;
if (curValue != null && curValue.All(char.IsWhiteSpace))
curValues.SetValue(ordinal, null);
}
}
return base.SaveChanges();
}优化注意事项:
string类型属性我试图查找一些内置类型的枚举,但没有找到类型的我使用的是Silverlight,UI中的TextBoxes将所有字符串属性设置为空字符串。
我尝试设置:
<TextBox
Text="{Binding MyStringProperty,
Mode=TwoWay,
ValidatesOnDataErrors=True,
TargetNullValue=''}"/>但这并没有多大帮助。
发布于 2011-06-23 09:33:14
这不是实体框架的工作。
您应该在存储库中或在数据库中使用触发器执行此操作。
或者在开始时执行(例如,当数据传入时,UI,外部源等)
https://stackoverflow.com/questions/6337928
复制相似问题