zoukankan      html  css  js  c++  java
  • LINQ To SQL 鉴别器列(Discriminator Column)示例 继承映射指南(翻的老贴子)

    原文作者:David Hayden ( Microsoft MVP C# )

    原文出处:LINQ To SQL Discriminator Column Example - Inheritance Mapping Tutorial

    我正在开发我的第二个LINQ TO SQL的程序,把它用在真实的项目中感觉很舒服。可惜LINQ TO SQL和VS2008正式版还没出来。(这是07年的帖子)。

    在第一次我用LINQ TO SQL的时候,我使用了LINQ TO SQL的单表继承特性。LINQ TO SQL可以让你指定鉴别器列(Discriminator Column)和继承映射,指定需要创建的继承类型。比如说我们有一个抽象的Employee类,映射数据库中的Employees表,并且还有几种其他的类型 hourly employee, salaried employee和commissioned-based employee继承它:

    image

    在Employees表中的EmployeeType列用于指定不同的雇员类型,它就是鉴别器列。

    image

    EmployeeType属性在抽象类Employee中被标注成为鉴别器列,LINQ  TO SQL列属性中的IsDiscriminator属性:

    [Column(Storage = "_EmployeeType",
        DbType 
    = "Int NOT NULL",
        IsDiscriminator 
    = true)]
    public int EmployeeType
    {
        
    // 
    }

    Employee类有一个继承映射(InheritanceMapping)属性,用于映射Employee值和类型:

    [Table(Name="dbo.Employees")]
    [InheritanceMapping(Code 
    = 0,
        Type 
    = typeof(HourlyEmployee), IsDefault = true)]
    [InheritanceMapping(Code 
    = 1,
        Type 
    = typeof(SalariedEmployee))]
    [InheritanceMapping(Code 
    = 2,
        Type 
    = typeof(CommissionedEmployee))]
    public abstract partial class Employee : 

    上面的InheritanceMapping属性指定了:

    • EmployeeType = 0: 创建HourlyEmployee类
    • EmployeeType = 1: 创建SalariedEmployee类
    • EmployeeType = 2: 创建CommissionedEmployee类

    现在当需要的Employee的时候,真正创建的类型会由EmployeeType列指定:

    using (HRDataContext dc = new HRDataContext())
    {
        
    foreach (Employee emp in dc.Employees)
            Console.WriteLine(emp.GetType().Name);
    }

    LINQ TO SQL鉴别器功能,用于继承映射一个单表,确实是很不错的功能,也被证明了在我的现在这个项目中是非常实用的。

  • 相关阅读:
    Python之路-(js正则表达式、前端页面的模板套用、Django基础)
    Python之路-jQuery
    单例模式实际应用
    hibernate联合主键注解配置
    spring:ContextLoaderListener接口
    Struts2 校验
    Control character in cookie value, consider BASE64 encoding your value-Cookie保存中文出错[转]
    基于Cookie跨域的单点登录问题
    Spring:启动项目时加载数据库数据(总结)
    Oracle表分区[转]
  • 原文地址:https://www.cnblogs.com/darkdawn/p/1408104.html
Copyright © 2011-2022 走看看