e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
275 lines
9.1 KiB
C#
275 lines
9.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
|
|
namespace System.Data.Linq.Mapping {
|
|
|
|
/// <summary>
|
|
/// Attribute placed on a method mapped to a User Defined Function.
|
|
/// </summary>
|
|
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
|
|
public sealed class FunctionAttribute : Attribute {
|
|
string name;
|
|
bool isComposable;
|
|
public FunctionAttribute() {
|
|
}
|
|
public string Name {
|
|
get { return this.name; }
|
|
set { this.name = value; }
|
|
}
|
|
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Composable", Justification="Spelling is correct.")]
|
|
public bool IsComposable {
|
|
get { return this.isComposable; }
|
|
set { this.isComposable = value; }
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// This attribute is applied to functions returning multiple result types,
|
|
/// to declare the possible result types returned from the function. For
|
|
/// inheritance types, only the root type of the inheritance hierarchy need
|
|
/// be specified.
|
|
/// </summary>
|
|
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
|
|
public sealed class ResultTypeAttribute : Attribute {
|
|
Type type;
|
|
public ResultTypeAttribute(Type type) {
|
|
this.type = type;
|
|
}
|
|
[SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods", Justification = "The contexts in which this is available are fairly specific.")]
|
|
public Type Type {
|
|
get { return this.type; }
|
|
}
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = false)]
|
|
public sealed class ParameterAttribute : Attribute {
|
|
string name;
|
|
string dbType;
|
|
public ParameterAttribute() {
|
|
}
|
|
public string Name {
|
|
get { return this.name; }
|
|
set { this.name = value; }
|
|
}
|
|
[SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db", Justification = "Conforms to legacy spelling.")]
|
|
public string DbType {
|
|
get { return this.dbType; }
|
|
set { this.dbType = value; }
|
|
}
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
|
|
public sealed class DatabaseAttribute : Attribute {
|
|
string name;
|
|
public DatabaseAttribute() {
|
|
}
|
|
public string Name {
|
|
get { return this.name; }
|
|
set { this.name = value; }
|
|
}
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
|
|
public sealed class TableAttribute : Attribute {
|
|
string name;
|
|
public TableAttribute() {
|
|
}
|
|
public string Name {
|
|
get { return this.name; }
|
|
set { this.name = value; }
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Class attribute used to describe an inheritance hierarchy to be mapped.
|
|
/// For example,
|
|
///
|
|
/// [Table(Name = "People")]
|
|
/// [InheritanceMapping(Code = "P", Type = typeof(Person), IsDefault=true)]
|
|
/// [InheritanceMapping(Code = "C", Type = typeof(Customer))]
|
|
/// [InheritanceMapping(Code = "E", Type = typeof(Employee))]
|
|
/// class Person { ... }
|
|
///
|
|
/// </summary>
|
|
[AttributeUsage(AttributeTargets.Class, AllowMultiple=true, Inherited = false)]
|
|
public sealed class InheritanceMappingAttribute : Attribute {
|
|
private object code;
|
|
private Type type;
|
|
private bool isDefault;
|
|
|
|
/// <summary>
|
|
/// Discriminator value in store column for this type.
|
|
/// </summary>
|
|
public object Code {
|
|
get { return this.code; }
|
|
set { this.code = value; }
|
|
}
|
|
/// <summary>
|
|
/// Type to instantiate when Key is matched.
|
|
/// </summary>
|
|
[SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods", Justification="The contexts in which this is available are fairly specific.")]
|
|
public Type Type {
|
|
get { return this.type; }
|
|
set { this.type = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// If discriminator value in store column is unrecognized then instantiate this type.
|
|
/// </summary>
|
|
public bool IsDefault {
|
|
get { return this.isDefault; }
|
|
set { this.isDefault = value; }
|
|
}
|
|
|
|
}
|
|
|
|
public abstract class DataAttribute : Attribute {
|
|
string name;
|
|
string storage;
|
|
protected DataAttribute() { }
|
|
public string Name {
|
|
get { return this.name; }
|
|
set { name = value; }
|
|
}
|
|
public string Storage {
|
|
get { return this.storage; }
|
|
set { this.storage = value; }
|
|
}
|
|
}
|
|
|
|
public enum UpdateCheck {
|
|
Always,
|
|
Never,
|
|
WhenChanged
|
|
}
|
|
|
|
/// <summary>
|
|
/// Used to specify for during insert and update operations when
|
|
/// a data member should be read back after the operation completes.
|
|
/// </summary>
|
|
public enum AutoSync {
|
|
Default = 0, // Automatically choose
|
|
Always = 1,
|
|
Never = 2,
|
|
OnInsert = 3,
|
|
OnUpdate = 4
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]
|
|
public sealed class ColumnAttribute : DataAttribute {
|
|
string dbtype;
|
|
string expression;
|
|
bool isPrimaryKey;
|
|
bool isDBGenerated;
|
|
bool isVersion;
|
|
bool isDiscriminator;
|
|
bool canBeNull = true;
|
|
UpdateCheck check;
|
|
AutoSync autoSync = AutoSync.Default;
|
|
bool canBeNullSet = false;
|
|
|
|
public ColumnAttribute() {
|
|
check = UpdateCheck.Always;
|
|
}
|
|
[SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db", Justification="Conforms to legacy spelling.")]
|
|
public string DbType {
|
|
get { return this.dbtype; }
|
|
set { this.dbtype = value; }
|
|
}
|
|
public string Expression {
|
|
get { return this.expression; }
|
|
set { this.expression = value; }
|
|
}
|
|
public bool IsPrimaryKey {
|
|
get { return this.isPrimaryKey; }
|
|
set { this.isPrimaryKey = value; }
|
|
}
|
|
[SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db", Justification = "Conforms to legacy spelling.")]
|
|
public bool IsDbGenerated {
|
|
get { return this.isDBGenerated; }
|
|
set { this.isDBGenerated = value; }
|
|
}
|
|
public bool IsVersion {
|
|
get { return this.isVersion; }
|
|
set { this.isVersion = value; }
|
|
}
|
|
public UpdateCheck UpdateCheck {
|
|
get { return this.check; }
|
|
set { this.check = value; }
|
|
}
|
|
public AutoSync AutoSync {
|
|
get { return this.autoSync; }
|
|
set { this.autoSync = value; }
|
|
}
|
|
public bool IsDiscriminator {
|
|
get { return this.isDiscriminator; }
|
|
set { isDiscriminator = value; }
|
|
}
|
|
public bool CanBeNull {
|
|
get {return this.canBeNull;}
|
|
set {
|
|
this.canBeNullSet = true;
|
|
this.canBeNull = value;
|
|
}
|
|
}
|
|
internal bool CanBeNullSet {
|
|
get {return this.canBeNullSet;}
|
|
}
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]
|
|
public sealed class AssociationAttribute : DataAttribute {
|
|
string thisKey;
|
|
string otherKey;
|
|
bool isUnique;
|
|
bool isForeignKey;
|
|
bool deleteOnNull;
|
|
string deleteRule;
|
|
|
|
public AssociationAttribute() { }
|
|
public string ThisKey {
|
|
get { return this.thisKey; }
|
|
set { this.thisKey = value; }
|
|
}
|
|
public string OtherKey {
|
|
get { return this.otherKey; }
|
|
set { this.otherKey = value; }
|
|
}
|
|
public bool IsUnique {
|
|
get { return this.isUnique; }
|
|
set { this.isUnique = value; }
|
|
}
|
|
public bool IsForeignKey {
|
|
get { return this.isForeignKey; }
|
|
set { this.isForeignKey = value; }
|
|
}
|
|
public string DeleteRule {
|
|
get { return this.deleteRule; }
|
|
set { this.deleteRule = value; }
|
|
}
|
|
public bool DeleteOnNull {
|
|
get { return this.deleteOnNull; }
|
|
set { this.deleteOnNull = value; }
|
|
}
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
|
|
public sealed class ProviderAttribute : Attribute {
|
|
Type providerType;
|
|
|
|
public ProviderAttribute() {
|
|
}
|
|
|
|
public ProviderAttribute(Type type) {
|
|
this.providerType = type;
|
|
}
|
|
|
|
[SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods", Justification = "The contexts in which this is available are fairly specific.")]
|
|
public Type Type {
|
|
get { return this.providerType; }
|
|
}
|
|
}
|
|
}
|