zoukankan      html  css  js  c++  java
  • LINQ To SQL中使用继承(附源码)

    作者:方明

    有的时候我们在设计数据库的时候发现如果完全把商务逻辑中的类影射到表中可能会照成数据库中很多表都很相似,甚至结构上都是一样的,下面举一个例子来说明如何处理这种情况。假设我们正在创建一个图书销售网站,但客户却希望这个图书销售网站可能需要销售其他产品,在业务逻辑层我们可能设计如下:

    表结构设计如下:

    那么如何映射对象和表呢,请看如下代码:

    Product

    book类:

    book类:

    OtherProduct类

    OtherProduct类

    数据上下文

    数据上下文

    这里最好将数据上下文以及product类从dbml文件中分离出来,因为这里边有一部分需要我们自己定义。这里边主要需要我们自定义的部分就是product类,需要在类前添加如下特性:
    [InheritanceMapping(Code = "1", Type = typeof(Product), IsDefault = true)]
    [InheritanceMapping(Code = "2", Type = typeof(Book))]
    [InheritanceMapping(Code = "3", Type = typeof(OtherProduct))]
    还有就是用于区分的属性TypeID前也要修改特性如下:
    [Column(IsDiscriminator = true, Storage = "_TypeID", DbType = "VarChar(50)")]
    应用:
    如果我们需要添加一本书到数据库中我们可以使用如下代码

    添加一本书

    在这里我们可以查看sql语句为:


    如果我们需要添加一个其他产品到数据库我们可以使用如下代码:

    添加其他商品

    在这里我们可以查看sql语句为:

    如果我们需要检索所有图书代码如下:

    检索所有书

    源码下载

  • 相关阅读:
    javascript 闭包与函数变量作用域
    javaScript for循环
    node-inspector调试node项目
    nodejs async异步常用函数总结
    nodejs安装配置新手篇
    requirejs笔记
    使用nodejs中httpProxy代理时候出现404异常
    Bluebird-Collections
    Bluebird-Core API (三)
    Bluebird-Core API(二)
  • 原文地址:https://www.cnblogs.com/nuaalfm/p/1288338.html
Copyright © 2011-2022 走看看