使用现有记录抽象类创建子项

时间:2014-02-18 08:16:16

标签: c# sql-server asp.net-mvc sql-server-2008 abstract-class

我的课程Person包含字段:

  • PersonID(PK)
  • 名称
  • 名字

班级Member的字段为:

  • PersonID(FK& PK)
  • 功能
  • 会员

Member继承自Person。因此,在数据库中,它还包含字段NameFirst Name

当我直接创建成员时,我会在文本框中提供所有数据并将其发送到数据库。我创建成员时数据库会自动创建一个人,这很好。 但是,当我有一个现有的人时,我想用这个数据来创建一个成员,比如升级这个人,但没有数据库创建一个新的人记录,因为那是不需要的,因为我已经有了这个人记录。

如何在C# and MVC完成此操作?

PS:DBMS is SQL Server 2008

1 个答案:

答案 0 :(得分:1)

您可能希望使用MERGE子句实现插入/更新查询。它可能看起来像:

MERGE Members AS t
USING 
    (
        SELECT  @person_id person_id,                           
    ) AS s
    ON t.person_id = s.person_id
WHEN MATCHED THEN
    UPDATE 
    SET ...
WHEN NOT MATCHED THEN
    INSERT
        (
            person_id,
            name,
            ...
        )
    VALUES
        (
            s.person_id,
            @name,
            ...
        );

因此,当您传递@person_id变量值为0或null或任何其他不存在的数据库时,您将获得新记录,否则,如果@person_id与db中的任何记录匹配,它'我会更新