SqlMetal生成的DBML文件信息

时间:2022-05-25 13:34:28

[Database(Name="AdventureWorks")] --> 映射数据库

[Table(Name="Customers")] --> 映射表

[Column(Name="CustomerID")] --> 映射字段

ColumnAttribute有以下内容:

Name     --> 列名

DbType   --> 数据列的类型

Storage  --> 类的暂存字段或变量(对应数据列字段)

IsPrimaryKey --> 是否主键

IsDbGenerated --> 是否自增

CanBeNull --> 是否允许null值

AutoSync --> 在Insert或Update操作执行后得到当前Column值

Never: 默认值,不为插入更新操作返回值

OnUpdate: 只返回更新操作的值

OnInsert: 只返回插入操作的值

Expression --> 数据计算数据列的值

IsVersion --> 指定当前列的版本或时间戳

UpdateCheck --> 在LINQ to SQL中对乐观并发操作控制

Always, Nerver, WhenChanged IsDiscriminator --> 鉴别列是否LINQ to SQL继承关系

RelationShips: LINQ to SQL定义一个AssociationAttribute属性表示关系,这个属性与EntitySet(TEntity)和EntityRef(TEntity)类型一起使用表示在数据库中外键关系

数据库中表的关系指的是主外键,LINQ to SQL 的主键是通过IsPrimaryKey来设置的,外键关系用AssociationAttribute决定

AssociationAttribute内容:

Name  --> 关系名

Storage  --> 暂时存储的字段或变量

IsUnique --> 外键是否有唯一约束

ThisKey  --> 在实体类的成员上标识,表示本成员的联合键值

otherkey --> 在多个目标实体上标识,表示与其他成员的联合键值

EntitySet类:设置外键的实体 与EntityRef结合-->EntityRef引用外键的实体

·一对多

1在M端:以EntityRef形式出现

M在1端:以EntitySet形式出现

·一对一 在各自的类中,均以EntityRef出现

·多对多:表的主键通常还有其他两个表的外键混合在表中

Linq to sql 对非侵入式和侵入式映射都支持

有哪几种Attribute呢?

TableAttribute

ColumnAttribute

AssociationAttribute

DatabaseAttribute

ProviderAttribute

FunctionAttribute

AutoSync  --> 自动同步 是一个枚举

public enum AutoSync {  Default,  Always,  Never,  OnInsert,  OnUpdate }

解释:在执行insert和update操作后,这个类的属性如何和数据库表对应的字段进行同步

AutoSync.Default  --> 列在数据库中有默认值,IsDbGenerated属性标记为true时则同步

AutoSync.Always  --> 总是进行同步

AutoSync.Never  --> 从不进行同步

AutoSync.OnInsert --> 在执行Insert操作后同步

AutoSync.OnUpdate --> 在更新的时候同步

在执行insert时,还会看到一个select代码,但我们并没有执行select操作,其实是AutoSync的原因,默认的时候IsDbGenerated为true的列是会被查出来返回的。

CanBeNull  --> 是否允许null

DbType  --> 创建表时,使用DbType指定列的数据类型

Expression --> 表示一个计算列,数据表的列通过计算获取的

IsDbGenerated --> 是否值在数据库中自动生成

IsPrimarykey --> 是否主键

IsVersion

UpdateCheck

Name  --> 属性名和列表不一致时指定

Storage  --> 赋值给私有字段而不是直接赋值给属性

Association:用来建立实体之间的关系

ThisKey  --> 用来标识和别的对象关联的键,如果没有指明就用本类属性上标识有IsPrimaryKey的了

OtherKey --> 用来定义关联的类的键,如果没有指定就用关联的那个类的标识列了

Name --> 指定关系名,是利用映射动态创建数据库的时候建立关系用的