gpt4 book ai didi

.net - 将空字符串分配给当前值为空的属性

转载 作者:行者123 更新时间:2023-12-02 00:35:53 25 4
gpt4 key购买 nike

在我的 EF4 EntityModel 中,我有一个名为 USERS 的实体。 USERS 具有通用的 UserName 和 Password 字符串字段。如果我这样做:

Dim u as new USERS  
U.UserName = String.Empty

那么 U.UserName 还是什么都没有。但是如果我这样做:

Dim u as new USERS   
u.UserName = “A”
u.UserName = String.Empty

然后 U.UserName 毫无问题地将 String.Empty 作为值。

原因是 EF4 生成 UserName 属性的方式

Public Property UserName() As Global.System.String  
Get
Return _UserName
End Get
Set
If (_UserName <> Value) Then ‘Here is the key
OnUserNameChanging(value)
ReportPropertyChanging("UserName")
_UserName = StructuralObject.SetValidValue(value, false)
ReportPropertyChanged("UserName")
OnUserNameChanged()
End If
End Set
End Property

我的问题是:

我该如何处理?

我可以做些什么来避免这种行为?我不想每次想将 string.empty 设置为没有任何值的属性时都进行两次赋值,而且我不想记住我每次都必须这样做,因为我很确定我会忘记它,然后我会在代码中引入错误。我只想将 empty.string 值分配给一个属性,该属性将“”作为值。

因为我来自 C# 并且我是 vb.net 的新手,我真的希望我错过了一些东西。

最佳答案

您确定要分配空字符串而不是空值吗?如果不是,您可以将属性设置为可为空吗?

无论哪种方式,您都可以使用 T4 模板(VS 称它们为代码生成器)来操作 EF 生成的代码,因此您可以通过这样做将属性 setter 实现更改为您想要的任何内容。

编辑 - 添加更多细节

如果您使用 POCO 生成器,您将获得普通属性,即没有属性更改等

如果您使用 EntityObject 生成器,它基本上可以让您编辑当前拥有的生成。如果您使用适用于 Visual Studio 的 T4 插件,您会在 T4 上获得语法高亮显示,VS2010 插件中有一些免费的非常好。您基本上拥有可以在那里生成代码的代码,您可以对其进行调整。您标记的行在第 523 行:

If (<#=code.FieldName(primitiveProperty)#> <> Value) Then

您可以尝试根据类型做一些时髦的事情,或者您可以恢复使用 Object.Equals() 或您想要的任何其他东西,而不是这一行。或者您可以完全删除 If 部分,但这可能会产生其他后果。当您保存 T4 模板时,它会为您更新所有生成的代码。

根据您的实际操作,POCO 模板可能会解决您的问题。

顺便说一句,如果您想了解更多关于 T4 的信息,请访问 Oleg Sych 的博客,http://www.olegsych.com/tag/t4/ .

关于.net - 将空字符串分配给当前值为空的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4605014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com