2012-04-11 86 views
0

我有一个WCF服务。需要将列拆分为两个

我有一个字段(称为名称),现在客户端想要将此更改为FirstName(前一半空格前)和LastName(空格后的所有内容)。

此WCF服务正在被不同的应用程序使用,我希望在不破坏任何现有客户端的情况下完成此操作。

即使它们不存在于数据库中,我可以添加两个新的数据库吗?这两个新数据成员的价值将如何确定或获得?

感谢

+3

请记住,这是正确做一个相当困难的事情。如果某人的姓氏中有空格,比如“Mark Van Duser”或者用大写字母“E”。 F. Codd'? – JNK 2012-04-11 15:06:09

+0

是的,或者如果你有一个人只有一个名字,就像很多来自非洲的足球运动员一样......你可能想要先检查一下是否有空间,然后再考虑是否需要它在名字或SecondName中 – 2012-04-11 15:15:31

回答

1

如果新的数据成员是字符串那么这应该是罚款,附加数据成员将旧版本的服务客户端忽略。

请参阅此相关的问题: Adding field to WCF data contract breaks clients?

+0

添加列应该没问题,但是如何检索数据。我有以下数据库[DataMember] public string Name {get;组; }。我将如何添加这两个新的数据记录? – Tippu 2012-04-11 15:14:39

+0

将它们添加为[DataMember] public string FirstName {get;组; },[DataMember] public string Surname {get;组; }(或类似),然后更新您的数据访问层以相应地填充。 – DaveRead 2012-04-11 15:17:27

5

像这样的东西应该工作:

DECLARE @FullName VARCHAR(255) 
SET @FullName = 'James Johnson' 

SELECT SUBSTRING(@FullName, 1, CHARINDEX(' ', @FullName) - 1) AS FirstName, 
     SUBSTRING(@FullName, CHARINDEX(' ', @FullName) + 1, LEN(@FullName)) AS LastName 

从上面看起来输出是这样的:

 
FirstName LastName 
------------ ---------------- 
John   Doe 

在代码中解析名称,下面的代码示例应名字和姓氏工作正常。如果你需要一个健壮的解析器来处理前缀,后缀和中间名,可以看看this article

var names = ("James Johnson").Split(Convert.ToChar(" ")); 
if (names.Length > 0) 
    Response.Write(string.Format("First: {0}, Last: {1}", names[0], names[1])); 
+0

我想在中间层执行此操作 – Tippu 2012-04-11 15:13:50

+0

添加了一个用于在代码中分割名称的示例。 – 2012-04-11 15:50:39