Imported Upstream version 3.6.0

Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
This commit is contained in:
Jo Shields
2014-08-13 10:39:27 +01:00
commit a575963da9
50588 changed files with 8155799 additions and 0 deletions

View File

@ -0,0 +1,161 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
namespace SampleEntityFrameworkProvider
{
public partial class SampleCommand : DbCommand
{
internal DbCommand _WrappedCommand = new SqlCommand();
public SampleCommand()
{
}
public SampleCommand(string commandText)
{
this.InitializeMe(commandText, null, null);
}
public SampleCommand(string commandText, SampleConnection connection)
{
this.InitializeMe(commandText, connection, null);
}
public SampleCommand(string commandText, SampleConnection connection, DbTransaction transaction)
{
this.InitializeMe(commandText, connection, transaction);
}
private void InitializeMe(string commandText, SampleConnection connection, DbTransaction transaction)
{
this.CommandText = commandText;
this.Connection = connection;
this.Transaction = transaction;
}
public override void Cancel()
{
this._WrappedCommand.Cancel();
}
public override string CommandText
{
get
{
return this._WrappedCommand.CommandText;
}
set
{
this._WrappedCommand.CommandText = value;
}
}
public override int CommandTimeout
{
get
{
return this._WrappedCommand.CommandTimeout;
}
set
{
this._WrappedCommand.CommandTimeout = value;
}
}
public override CommandType CommandType
{
get
{
return this._WrappedCommand.CommandType;
}
set
{
this._WrappedCommand.CommandType = value;
}
}
protected override DbParameter CreateDbParameter()
{
return this._WrappedCommand.CreateParameter();
}
private SampleConnection _Connection = null;
protected override DbConnection DbConnection
{
get
{
return this._Connection;
}
set
{
this._Connection = (SampleConnection) value;
this._WrappedCommand.Connection = this._Connection._WrappedConnection;
}
}
protected override DbParameterCollection DbParameterCollection
{
get { return this._WrappedCommand.Parameters; }
}
private DbTransaction _Transaction = null;
protected override DbTransaction DbTransaction
{
get
{
return this._Transaction;
}
set
{
this._Transaction = value;
this._WrappedCommand.Transaction = this._Transaction;
}
}
private bool _DesignTimeVisible = true;
public override bool DesignTimeVisible
{
get
{
return this._DesignTimeVisible;
}
set
{
this._DesignTimeVisible = value;
}
}
protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior)
{
return this._WrappedCommand.ExecuteReader(behavior);
}
public override int ExecuteNonQuery()
{
return this._WrappedCommand.ExecuteNonQuery();
}
public override object ExecuteScalar()
{
return this._WrappedCommand.ExecuteScalar();
}
public override void Prepare()
{
this._WrappedCommand.Prepare();
}
public override UpdateRowSource UpdatedRowSource
{
get
{
return this._WrappedCommand.UpdatedRowSource;
}
set
{
this._WrappedCommand.UpdatedRowSource = value;
}
}
}
}

View File

@ -0,0 +1,140 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
namespace SampleEntityFrameworkProvider
{
public partial class SampleConnection : DbConnection, ICloneable
{
internal DbConnection _WrappedConnection = new SqlConnection();
public SampleConnection()
{
}
public SampleConnection(string connectionString)
{
this.ConnectionString = connectionString;
}
public void ClearPool()
{
SqlConnection.ClearPool((SqlConnection)_WrappedConnection);
}
protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel)
{
return this._WrappedConnection.BeginTransaction(isolationLevel);
}
public override void ChangeDatabase(string databaseName)
{
this._WrappedConnection.ChangeDatabase(databaseName);
}
public override void Close()
{
this._WrappedConnection.Close();
}
public override string ConnectionString
{
get
{
return this._WrappedConnection.ConnectionString;
}
set
{
this._WrappedConnection.ConnectionString = value;
}
}
public override int ConnectionTimeout
{
get
{
return this._WrappedConnection.ConnectionTimeout;
}
}
protected override DbCommand CreateDbCommand()
{
DbCommand command = SampleFactory.Instance.CreateCommand();
command.Connection = this;
return command;
}
public override string Database
{
get { return this._WrappedConnection.Database;}
}
public override string DataSource
{
get { return this._WrappedConnection.DataSource; }
}
protected override void Dispose(bool disposing)
{
if (disposing)
this._WrappedConnection.Dispose();
base.Dispose(disposing);
}
public override void EnlistTransaction(System.Transactions.Transaction transaction)
{
this._WrappedConnection.EnlistTransaction(transaction);
}
public override DataTable GetSchema(string collectionName)
{
return this._WrappedConnection.GetSchema(collectionName);
}
public override DataTable GetSchema()
{
return this._WrappedConnection.GetSchema();
}
public override DataTable GetSchema(string collectionName, string[] restrictionValues)
{
return this._WrappedConnection.GetSchema(collectionName, restrictionValues);
}
public override void Open()
{
this._WrappedConnection.Open();
}
public override string ServerVersion
{
get { return this._WrappedConnection.ServerVersion; }
}
public override System.ComponentModel.ISite Site
{
get
{
return this._WrappedConnection.Site;
}
set
{
this._WrappedConnection.Site = value;
}
}
public override ConnectionState State
{
get { return this._WrappedConnection.State; }
}
object ICloneable.Clone()
{
SampleConnection clone = new SampleConnection();
clone._WrappedConnection = (DbConnection) ((ICloneable) this._WrappedConnection).Clone();
return clone;
}
}
}

View File

@ -0,0 +1,64 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
namespace SampleEntityFrameworkProvider
{
public partial class SampleFactory : DbProviderFactory
{
public static readonly SampleFactory Instance = new SampleFactory();
public override bool CanCreateDataSourceEnumerator
{
get
{
return true;
}
}
public override DbCommand CreateCommand()
{
return new SampleCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new SqlCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new SampleConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
return new SqlConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new SqlDataAdapter();
}
public override DbDataSourceEnumerator CreateDataSourceEnumerator()
{
return System.Data.Sql.SqlDataSourceEnumerator.Instance;
}
public override DbParameter CreateParameter()
{
return new SqlParameter();
}
public override System.Security.CodeAccessPermission CreatePermission(System.Security.Permissions.PermissionState state)
{
return new SqlClientPermission(state);
}
}
}

View File

@ -0,0 +1,84 @@
Changes from Beta1:
Overall project:
Renamed from OrcasSampleProvider to SampleEntityFrameworkProvider
ProviderServices:
Remove CreateCommandDefinition(DbCommand prototype)
Rename CreateCommandDefinition(DbConnection connection, DbCommandTree commandTree) to CreateDbCommandDefinition, mark as protected
Remove GetProviderManifest
Add GetDbInformation
SqlGenerator:
Rename Namespace NamespaceName in HandleDatepartDateFunction, WriteFunctionName functions
GetSqlPrimitiveType overhauled
Visit(DbGroupByExpression) overhauled
Added support for canonical functions
MetadataHelpers:
Remove reference to PrimitiveTypeKind.Money, PrimitiveTypeKind.Xml in GetDbType
Changes from Beta2:
Overall project:
Added DbProviderManifest class
ProviderServices:
GetDbInformation(string, DbConnection) : XmlReader replaced with GetDbProviderManifest(DbConnection or string) :DbProviderManifest
Resources:
All resources (.csdl, .ssdl, .msl, .xsd) were updated (from product code; it is difficult for me to explain the changes); providermanifest.xml has more changes than any other…
MetadataHelpers:
Removed references to PrimitiveTypeKind.UInt* in GetDbType
Added GetFacetValueOrDefault helper
SqlGenerator:
Fixed NPE in Visit(DbConstantExpression)
Fixed bug with parentheses and multiple function arguments in HandleFunctionArgumentsDefault
HandleCanonicalFunctionLength no longer compensates for LEN SQL function not counting trailing whitespaces
Changed logic converting PrimitiveType to sql type in GetSqlPrimitiveType
WriteFunctionName uses schema name to create quoted function name
Connection:
Changed DataSource property to use DataSource property of wrapped connection (it was using DataBase property before)
Changes from Beta3
Removed DbProviderServices.GetProviderManifest(DbConnection)
Added DbProviderServices.GetProviderManifestToken(DbConnection)
Completely redesigned CSDL/SSDL/MSL for SchemaInformation
Changed the format of the provider manifest XML:
- DefaultValue vs Default
- removed facets from functions
Added DbProviderManifest.Token/DbProviderManifest.Provider properties
(they are not used in SP1Beta and will removed in RTM).
Changes from SP1 Beta
Removed DbProviderManifest.Token and DbProviderManifest.Provider properties
Removed DbFunctionExpression.IsLambda
Renamed DbFunctionCommandTree.Function to DbFunctionCommandTree.EdmFunction
Removed DbCommandTree.Validate()
Changes in .NET Framework 4 Beta2
Updated the provider to support Entity Framework runtime features introduced in .NET 4.0 Beta 1 and .NET 4.0 Beta 2 that impact providers.
- Added support for the canonical functions introduced by .NET 4.0 Beta 1.
- Added FunctionStubGenerator, a sample tool to generate a class that exposes the sample provider's store functions to LINQ to Entites users.
- Added support for the feature "Translating String.StartsWith, String.EndsWith and String.Contains to LIKE in LINQ to Entities". In particular, the methods DbProviderManifest.SupportsEscapingLikeArgument and DbProviderManifest.EscapeLikeArgument have been implemented.
- Added support for SQL Server 2008. The sample provider now supports both SQL Server 2005 and SQL Server 2008.
- Added DDL generation support for DatabaseExists/DeleteDatabase/CreateDatabase
Minor code refactoring.
Changes in Entity Framework 5 (.NET Framework 4.5 required)
Updated the provider to support features introduced in Entity Framework 5:
- CSDL/MSL/SSDL artifacts moved to version 3.0
- Added support for spatial types and functions
- Added tests to verify that stored procedures with multiple resultset work with the provider
- Added tests to verify that Table Valued Functions work with the provider
- Updated schema views to use version 3.0 of MSL and SSDL to enable generating code for TVFs
Updated DDEX Provider to work with Visual Studio 11
ConsoleTests converted to xUnit

View File

@ -0,0 +1,33 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Data.Common;
namespace SampleEntityFrameworkProvider
{
public partial class SampleCommand : ICloneable
{
object ICloneable.Clone()
{
SampleCommand clone = new SampleCommand();
clone._Connection = this._Connection;
//Defer to the Clone method on the wrapped SqlCommand
clone._WrappedCommand = (DbCommand)((ICloneable)this._WrappedCommand).Clone();
////An alternate approach is to create a new instance of the Command and
////set values of the properties of the new Command to the corresponding
////properties of the original command, using code like:
//clone.Connection = this.Connection;
//clone.CommandText = this.CommandText;
//clone.CommandType = this.CommandType;
//clone.CommandTimeout = this.CommandTimeout;
//clone.DesignTimeVisible = this.DesignTimeVisible;
//clone.Transaction = this.Transaction;
//clone.UpdatedRowSource = this.UpdatedRowSource;
//foreach (DbParameter p in this.Parameters)
// clone.Parameters.Add((DbParameter) ((ICloneable)p).Clone());
return clone;
}
}
}

View File

@ -0,0 +1,28 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
namespace SampleEntityFrameworkProvider
{
public partial class SampleConnection
{
protected override DbProviderFactory DbProviderFactory
{
get
{
return SampleFactory.Instance;
}
}
internal DbProviderFactory ProviderFactory
{
get
{
return DbProviderFactory;
}
}
}
}

View File

@ -0,0 +1,375 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Data.Metadata.Edm;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
namespace SampleEntityFrameworkProvider
{
sealed class DdlBuilder
{
private readonly StringBuilder stringBuilder = new StringBuilder();
private readonly HashSet<EntitySet> ignoredEntitySets = new HashSet<EntitySet>();
internal static string CreateObjectsScript(StoreItemCollection itemCollection)
{
DdlBuilder builder = new DdlBuilder();
foreach (EntityContainer container in itemCollection.GetItems<EntityContainer>())
{
var entitySets = container.BaseEntitySets.OfType<EntitySet>().OrderBy(s => s.Name);
var schemas = new HashSet<string>(entitySets.Select(s => GetSchemaName(s)));
foreach (string schema in schemas.OrderBy(s => s))
{
// don't bother creating default schema
if (schema != "dbo")
{
builder.AppendCreateSchema(schema);
}
}
foreach (EntitySet entitySet in container.BaseEntitySets.OfType<EntitySet>().OrderBy(s => s.Name))
{
builder.AppendCreateTable(entitySet);
}
foreach (AssociationSet associationSet in container.BaseEntitySets.OfType<AssociationSet>().OrderBy(s => s.Name))
{
builder.AppendCreateForeignKeys(associationSet);
}
}
return builder.GetCommandText();
}
internal static string CreateDatabaseScript(string databaseName, string dataFileName, string logFileName)
{
var builder = new DdlBuilder();
builder.AppendSql("create database ");
builder.AppendIdentifier(databaseName);
if (null != dataFileName)
{
builder.AppendSql(" on primary ");
builder.AppendFileName(dataFileName);
builder.AppendSql(" log on ");
builder.AppendFileName(logFileName);
}
return builder.stringBuilder.ToString();
}
internal static string CreateDatabaseExistsScript(string databaseName)
{
var builder = new DdlBuilder();
builder.AppendSql("SELECT Count(*) FROM ");
builder.AppendSql("sys.databases");
builder.AppendSql(" WHERE [name]=");
builder.AppendStringLiteral(databaseName);
return builder.stringBuilder.ToString();
}
internal static string DropDatabaseScript(string databaseName)
{
var builder = new DdlBuilder();
builder.AppendSql("drop database ");
builder.AppendIdentifier(databaseName);
return builder.stringBuilder.ToString();
}
internal string GetCommandText()
{
return this.stringBuilder.ToString();
}
private static string GetSchemaName(EntitySet entitySet)
{
var schemaName = entitySet.MetadataProperties["Schema"].Value as string;
return schemaName ?? entitySet.EntityContainer.Name;
}
private static string GetTableName(EntitySet entitySet)
{
string tableName = entitySet.MetadataProperties["Table"].Value as string;
return tableName ?? entitySet.Name;
}
private void AppendCreateForeignKeys(AssociationSet associationSet)
{
var constraint = associationSet.ElementType.ReferentialConstraints.Single();
var principalEnd = associationSet.AssociationSetEnds[constraint.FromRole.Name];
var dependentEnd = associationSet.AssociationSetEnds[constraint.ToRole.Name];
// If any of the participating entity sets was skipped, skip the association too
if (ignoredEntitySets.Contains(principalEnd.EntitySet) || ignoredEntitySets.Contains(dependentEnd.EntitySet))
{
AppendSql("-- Ignoring association set with participating entity set with defining query: ");
AppendIdentifierEscapeNewLine(associationSet.Name);
}
else
{
AppendSql("alter table ");
AppendIdentifier(dependentEnd.EntitySet);
AppendSql(" add constraint ");
AppendIdentifier(associationSet.Name);
AppendSql(" foreign key (");
AppendIdentifiers(constraint.ToProperties);
AppendSql(") references ");
AppendIdentifier(principalEnd.EntitySet);
AppendSql("(");
AppendIdentifiers(constraint.FromProperties);
AppendSql(")");
if (principalEnd.CorrespondingAssociationEndMember.DeleteBehavior == OperationAction.Cascade)
{
AppendSql(" on delete cascade");
}
AppendSql(";");
}
AppendNewLine();
}
private void AppendCreateTable(EntitySet entitySet)
{
//If the entity set has defining query, skip it
if (entitySet.MetadataProperties["DefiningQuery"].Value != null)
{
AppendSql("-- Ignoring entity set with defining query: ");
AppendIdentifier(entitySet, AppendIdentifierEscapeNewLine);
ignoredEntitySets.Add(entitySet);
}
else
{
AppendSql("create table ");
AppendIdentifier(entitySet);
AppendSql(" (");
AppendNewLine();
foreach (EdmProperty column in entitySet.ElementType.Properties)
{
AppendSql(" ");
AppendIdentifier(column.Name);
AppendSql(" ");
AppendType(column);
AppendSql(",");
AppendNewLine();
}
AppendSql(" primary key (");
AppendJoin(entitySet.ElementType.KeyMembers, k => AppendIdentifier(k.Name), ", ");
AppendSql(")");
AppendNewLine();
AppendSql(");");
}
AppendNewLine();
}
private void AppendCreateSchema(string schema)
{
AppendSql("if (schema_id(");
AppendStringLiteral(schema);
AppendSql(") is null) exec(");
// need to create a sub-command and escape it as a string literal as well...
DdlBuilder schemaBuilder = new DdlBuilder();
schemaBuilder.AppendSql("create schema ");
schemaBuilder.AppendIdentifier(schema);
AppendStringLiteral(schemaBuilder.stringBuilder.ToString());
AppendSql(");");
AppendNewLine();
}
private void AppendIdentifier(EntitySet table)
{
AppendIdentifier(table, AppendIdentifier);
}
private void AppendIdentifier(EntitySet table, Action<string> AppendIdentifierEscape)
{
string schemaName = GetSchemaName(table);
string tableName = GetTableName(table);
if (schemaName != null)
{
AppendIdentifierEscape(schemaName);
AppendSql(".");
}
AppendIdentifierEscape(tableName);
}
private void AppendStringLiteral(string literalValue)
{
AppendSql("N'" + literalValue.Replace("'", "''") + "'");
}
private void AppendIdentifiers(IEnumerable<EdmProperty> properties)
{
AppendJoin(properties, p => AppendIdentifier(p.Name), ", ");
}
private void AppendIdentifier(string identifier)
{
AppendSql("[" + identifier.Replace("]", "]]") + "]");
}
private void AppendIdentifierEscapeNewLine(string identifier)
{
AppendIdentifier(identifier.Replace("\r", "\r--").Replace("\n", "\n--"));
}
private void AppendFileName(string path)
{
AppendSql("(name=");
AppendStringLiteral(Path.GetFileName(path));
AppendSql(", filename=");
AppendStringLiteral(path);
AppendSql(")");
}
private void AppendJoin<T>(IEnumerable<T> elements, Action<T> appendElement, string unencodedSeparator)
{
bool first = true;
foreach (T element in elements)
{
if (first)
{
first = false;
}
else
{
AppendSql(unencodedSeparator);
}
appendElement(element);
}
}
private void AppendType(EdmProperty column)
{
TypeUsage type = column.TypeUsage;
// check for rowversion-like configurations
Facet storeGenFacet;
bool isTimestamp = false;
if (type.EdmType.Name == "binary" &&
8 == type.GetMaxLength() &&
column.TypeUsage.Facets.TryGetValue("StoreGeneratedPattern", false, out storeGenFacet) &&
storeGenFacet.Value != null &&
StoreGeneratedPattern.Computed == (StoreGeneratedPattern)storeGenFacet.Value)
{
isTimestamp = true;
AppendIdentifier("rowversion");
}
else
{
string typeName = type.EdmType.Name;
// Special case: the EDM treats 'nvarchar(max)' as a type name, but SQL Server treats
// it as a type 'nvarchar' and a type qualifier. As such, we can't escape the entire
// type name as the EDM sees it.
const string maxSuffix = "(max)";
if (type.EdmType.BuiltInTypeKind == BuiltInTypeKind.PrimitiveType && typeName.EndsWith(maxSuffix, StringComparison.Ordinal))
{
//Debug.Assert(new[] { "nvarchar(max)", "varchar(max)", "varbinary(max)" }.Contains(typeName),
// "no other known SQL Server primitive types types accept (max)");
AppendIdentifier(typeName.Substring(0, typeName.Length - maxSuffix.Length));
AppendSql("(max)");
}
else
{
AppendIdentifier(typeName);
}
switch (type.EdmType.Name)
{
case "decimal":
case "numeric":
AppendSqlInvariantFormat("({0}, {1})", type.GetPrecision(), type.GetScale());
break;
case "datetime2":
case "datetimeoffset":
case "time":
AppendSqlInvariantFormat("({0})", type.GetPrecision());
break;
case "binary":
case "varbinary":
case "nvarchar":
case "varchar":
case "char":
case "nchar":
AppendSqlInvariantFormat("({0})", type.GetMaxLength());
break;
default:
break;
}
}
AppendSql(column.Nullable ? " null" : " not null");
if (!isTimestamp && column.TypeUsage.Facets.TryGetValue("StoreGeneratedPattern", false, out storeGenFacet) &&
storeGenFacet.Value != null)
{
StoreGeneratedPattern storeGenPattern = (StoreGeneratedPattern)storeGenFacet.Value;
if (storeGenPattern == StoreGeneratedPattern.Identity)
{
if (type.EdmType.Name == "uniqueidentifier")
{
AppendSql(" default newid()");
}
else
{
AppendSql(" identity");
}
}
}
}
/// <summary>
/// Appends raw SQL into the string builder.
/// </summary>
/// <param name="text">Raw SQL string to append into the string builder.</param>
private void AppendSql(string text)
{
stringBuilder.Append(text);
}
/// <summary>
/// Appends new line for visual formatting or for ending a comment.
/// </summary>
private void AppendNewLine()
{
stringBuilder.Append("\r\n");
}
/// <summary>
/// Append raw SQL into the string builder with formatting options and invariant culture formatting.
/// </summary>
/// <param name="format">A composite format string.</param>
/// <param name="args">An array of objects to format.</param>
private void AppendSqlInvariantFormat(string format, params object[] args)
{
stringBuilder.AppendFormat(CultureInfo.InvariantCulture, format, args);
}
}
internal static class MetadataHelper
{
internal static byte GetPrecision(this TypeUsage type)
{
return type.GetFacetValue<byte>("Precision");
}
internal static byte GetScale(this TypeUsage type)
{
return type.GetFacetValue<byte>("Scale");
}
internal static int GetMaxLength(this TypeUsage type)
{
return type.GetFacetValue<int>("MaxLength");
}
internal static T GetFacetValue<T>(this TypeUsage type, string facetName)
{
return (T)type.Facets[facetName].Value;
}
}
}

View File

@ -0,0 +1,18 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Data.Common;
namespace SampleEntityFrameworkProvider
{
public partial class SampleFactory : IServiceProvider
{
//Implement IServiceProvider
object IServiceProvider.GetService(Type serviceType)
{
if (serviceType == typeof(DbProviderServices))
return SampleProviderServices.Instance;
else
return null;
}
}
}

View File

@ -0,0 +1,40 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SampleEntityFrameworkProvider")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("SampleEntityFrameworkProvider")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2007")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("cd55a5bb-59de-4707-ad81-5cd6e4a57fb9")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: InternalsVisibleTo("ProviderTests, PublicKey=00240000048000009400000006020000002400005253413100040000010001007bcbec502ff68b52372ee06e2905b5261fa51398ae2e44076ee3a6b32d54d67bb84dec89a6bff3ce8c76759ca8a8f2a0a43f5eccf8b22d259a656fad665615b250e3902c84f50106b268d4fcb913df9ada8be54b4c7c37e52628a4c8d0777cbbbb1f0de6ecf976f31fabc5410c8567826da4efafade3049a51929e45c1b779b7")]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,442 @@
<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S" xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
<EntityContainerMapping StorageEntityContainer="Schema" CdmEntityContainer="SchemaInformation">
<EntitySetMapping Name="Tables" StoreEntitySet="STables" TypeName="Store.Table">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="CatalogName" ColumnName="CatalogName" />
<ScalarProperty Name="SchemaName" ColumnName="SchemaName" />
<ScalarProperty Name="Name" ColumnName="Name" />
</EntitySetMapping>
<EntitySetMapping Name="TableColumns" StoreEntitySet="STableColumns" TypeName="Store.Column">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="Ordinal" ColumnName="Ordinal" />
<ScalarProperty Name="IsNullable" ColumnName="IsNullable" />
<ComplexProperty Name="ColumnType">
<ScalarProperty Name="TypeName" ColumnName="TypeName" />
<ScalarProperty Name="MaxLength" ColumnName="MaxLength" />
<ScalarProperty Name="DateTimePrecision" ColumnName="DateTimePrecision" />
<ScalarProperty Name="Precision" ColumnName="Precision" />
<ScalarProperty Name="Scale" ColumnName="Scale" />
<ComplexProperty Name="Collation">
<ScalarProperty Name="CatalogName" ColumnName="CollationCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CollationSchema" />
<ScalarProperty Name="Name" ColumnName="CollationName" />
</ComplexProperty>
<ComplexProperty Name="CharacterSet">
<ScalarProperty Name="CatalogName" ColumnName="CharacterSetCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CharacterSetSchema" />
<ScalarProperty Name="Name" ColumnName="CharacterSetName" />
</ComplexProperty>
<ScalarProperty Name="IsMultiSet" ColumnName="IsMultiSet" />
</ComplexProperty>
<ScalarProperty Name="IsIdentity" ColumnName="IsIdentity" />
<ScalarProperty Name="IsStoreGenerated" ColumnName="IsStoreGenerated" />
<ScalarProperty Name="Default" ColumnName="Default" />
</EntitySetMapping>
<EntitySetMapping Name="Views" StoreEntitySet="SViews" TypeName="Store.View">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="CatalogName" ColumnName="CatalogName" />
<ScalarProperty Name="SchemaName" ColumnName="SchemaName" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="ViewDefinition" ColumnName="ViewDefinition" />
<ScalarProperty Name="IsUpdatable" ColumnName="IsUpdatable" />
</EntitySetMapping>
<EntitySetMapping Name="ViewColumns" StoreEntitySet="SViewColumns" TypeName="Store.Column">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="Ordinal" ColumnName="Ordinal" />
<ScalarProperty Name="IsNullable" ColumnName="IsNullable" />
<ComplexProperty Name="ColumnType">
<ScalarProperty Name="TypeName" ColumnName="TypeName" />
<ScalarProperty Name="MaxLength" ColumnName="MaxLength" />
<ScalarProperty Name="Precision" ColumnName="Precision" />
<ScalarProperty Name="DateTimePrecision" ColumnName="DateTimePrecision" />
<ScalarProperty Name="Scale" ColumnName="Scale" />
<ComplexProperty Name="Collation">
<ScalarProperty Name="CatalogName" ColumnName="CollationCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CollationSchema" />
<ScalarProperty Name="Name" ColumnName="CollationName" />
</ComplexProperty>
<ComplexProperty Name="CharacterSet">
<ScalarProperty Name="CatalogName" ColumnName="CharacterSetCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CharacterSetSchema" />
<ScalarProperty Name="Name" ColumnName="CharacterSetName" />
</ComplexProperty>
<ScalarProperty Name="IsMultiSet" ColumnName="IsMultiSet" />
</ComplexProperty>
<ScalarProperty Name="IsIdentity" ColumnName="IsIdentity" />
<ScalarProperty Name="IsStoreGenerated" ColumnName="IsStoreGenerated" />
<ScalarProperty Name="Default" ColumnName="Default" />
</EntitySetMapping>
<EntitySetMapping Name="Functions" >
<EntityTypeMapping TypeName="IsTypeOf(Store.Function)">
<MappingFragment StoreEntitySet="SFunctions">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="CatalogName" ColumnName="CatalogName" />
<ScalarProperty Name="SchemaName" ColumnName="SchemaName" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="IsBuiltIn" ColumnName="IsBuiltIn" />
<ScalarProperty Name="IsNiladic" ColumnName="IsNiladic" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="Store.ScalarFunction">
<MappingFragment StoreEntitySet="SFunctions">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="IsAggregate" ColumnName="IsAggregate" />
<ComplexProperty Name="ReturnType">
<ScalarProperty Name="TypeName" ColumnName="ReturnTypeName" />
<ScalarProperty Name="MaxLength" ColumnName="ReturnMaxLength" />
<ScalarProperty Name="Precision" ColumnName="ReturnPrecision" />
<ScalarProperty Name="DateTimePrecision" ColumnName="ReturnDateTimePrecision" />
<ScalarProperty Name="Scale" ColumnName="ReturnScale" />
<ComplexProperty Name="Collation">
<ScalarProperty Name="CatalogName" ColumnName="ReturnCollationCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="ReturnCollationSchema" />
<ScalarProperty Name="Name" ColumnName="ReturnCollationName" />
</ComplexProperty>
<ComplexProperty Name="CharacterSet">
<ScalarProperty Name="CatalogName" ColumnName="ReturnCharacterSetCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="ReturnCharacterSetSchema" />
<ScalarProperty Name="Name" ColumnName="ReturnCharacterSetName" />
</ComplexProperty>
<ScalarProperty Name="IsMultiSet" ColumnName="ReturnIsMultiSet" />
</ComplexProperty>
<Condition ColumnName="IsTvf" Value="false"/>
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="Store.TableValuedFunction">
<MappingFragment StoreEntitySet="SFunctions">
<ScalarProperty Name="Id" ColumnName="Id" />
<Condition ColumnName="IsTvf" Value="true"/>
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="FunctionParameters" TypeName="Store.Parameter" StoreEntitySet="SFunctionParameters">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="Ordinal" ColumnName="Ordinal" />
<ComplexProperty Name="ParameterType">
<ScalarProperty Name="TypeName" ColumnName="TypeName" />
<ScalarProperty Name="MaxLength" ColumnName="MaxLength" />
<ScalarProperty Name="DateTimePrecision" ColumnName="DateTimePrecision" />
<ScalarProperty Name="Precision" ColumnName="Precision" />
<ScalarProperty Name="Scale" ColumnName="Scale" />
<ComplexProperty Name="Collation">
<ScalarProperty Name="CatalogName" ColumnName="CollationCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CollationSchema" />
<ScalarProperty Name="Name" ColumnName="CollationName" />
</ComplexProperty>
<ComplexProperty Name="CharacterSet">
<ScalarProperty Name="CatalogName" ColumnName="CharacterSetCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CharacterSetSchema" />
<ScalarProperty Name="Name" ColumnName="CharacterSetName" />
</ComplexProperty>
<ScalarProperty Name="IsMultiSet" ColumnName="IsMultiSet" />
</ComplexProperty>
<ScalarProperty Name="Mode" ColumnName="Mode" />
<ScalarProperty Name="Default" ColumnName="Default" />
</EntitySetMapping>
<EntitySetMapping Name="FunctionReturnTableColumns" StoreEntitySet="SFunctionReturnTableColumns" TypeName="Store.FunctionReturnTableColumn">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="Ordinal" ColumnName="Ordinal" />
<ScalarProperty Name="IsNullable" ColumnName="IsNullable" />
<ComplexProperty Name="ColumnType">
<ScalarProperty Name="TypeName" ColumnName="TypeName" />
<ScalarProperty Name="MaxLength" ColumnName="MaxLength" />
<ScalarProperty Name="DateTimePrecision" ColumnName="DateTimePrecision" />
<ScalarProperty Name="Precision" ColumnName="Precision" />
<ScalarProperty Name="Scale" ColumnName="Scale" />
<ComplexProperty Name="Collation">
<ScalarProperty Name="CatalogName" ColumnName="CollationCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CollationSchema" />
<ScalarProperty Name="Name" ColumnName="CollationName" />
</ComplexProperty>
<ComplexProperty Name="CharacterSet">
<ScalarProperty Name="CatalogName" ColumnName="CharacterSetCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CharacterSetSchema" />
<ScalarProperty Name="Name" ColumnName="CharacterSetName" />
</ComplexProperty>
<ScalarProperty Name="IsMultiSet" ColumnName="IsMultiSet" />
</ComplexProperty>
<ScalarProperty Name="IsIdentity" ColumnName="IsIdentity" />
<ScalarProperty Name="IsStoreGenerated" ColumnName="IsStoreGenerated" />
<ScalarProperty Name="Default" ColumnName="Default" />
</EntitySetMapping>
<EntitySetMapping Name="Procedures" TypeName="Store.Procedure" StoreEntitySet="SProcedures">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="CatalogName" ColumnName="CatalogName" />
<ScalarProperty Name="SchemaName" ColumnName="SchemaName" />
<ScalarProperty Name="Name" ColumnName="Name" />
</EntitySetMapping>
<EntitySetMapping Name="ProcedureParameters" TypeName="Store.Parameter" StoreEntitySet="SProcedureParameters">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="Ordinal" ColumnName="Ordinal" />
<ComplexProperty Name="ParameterType">
<ScalarProperty Name="TypeName" ColumnName="TypeName" />
<ScalarProperty Name="MaxLength" ColumnName="MaxLength" />
<ScalarProperty Name="DateTimePrecision" ColumnName="DateTimePrecision" />
<ScalarProperty Name="Precision" ColumnName="Precision" />
<ScalarProperty Name="Scale" ColumnName="Scale" />
<ComplexProperty Name="Collation">
<ScalarProperty Name="CatalogName" ColumnName="CollationCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CollationSchema" />
<ScalarProperty Name="Name" ColumnName="CollationName" />
</ComplexProperty>
<ComplexProperty Name="CharacterSet">
<ScalarProperty Name="CatalogName" ColumnName="CharacterSetCatalog" />
<ScalarProperty Name="SchemaName" ColumnName="CharacterSetSchema" />
<ScalarProperty Name="Name" ColumnName="CharacterSetName" />
</ComplexProperty>
<ScalarProperty Name="IsMultiSet" ColumnName="IsMultiSet" />
</ComplexProperty>
<ScalarProperty Name="Mode" ColumnName="Mode" />
<ScalarProperty Name="Default" ColumnName="Default" />
</EntitySetMapping>
<EntitySetMapping Name="TableConstraints" >
<EntityTypeMapping TypeName="IsTypeOf(Store.Constraint)">
<MappingFragment StoreEntitySet="SConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="IsDeferrable" ColumnName="IsDeferrable" />
<ScalarProperty Name="IsInitiallyDeferred" ColumnName="IsInitiallyDeferred" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="Store.UniqueConstraint">
<MappingFragment StoreEntitySet="SConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<Condition ColumnName="ConstraintType" Value="UNIQUE"/>
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="Store.CheckConstraint">
<MappingFragment StoreEntitySet="SConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<Condition ColumnName="ConstraintType" Value="CHECK"/>
</MappingFragment>
<MappingFragment StoreEntitySet="SCheckConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Expression" ColumnName="Expression" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="Store.PrimaryKeyConstraint">
<MappingFragment StoreEntitySet="SConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<Condition ColumnName="ConstraintType" Value="PRIMARY KEY"/>
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="Store.ForeignKeyConstraint">
<MappingFragment StoreEntitySet="SConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<Condition ColumnName="ConstraintType" Value="FOREIGN KEY"/>
</MappingFragment>
<MappingFragment StoreEntitySet="SForeignKeyConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="UpdateRule" ColumnName="UpdateRule" />
<ScalarProperty Name="DeleteRule" ColumnName="DeleteRule" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="ViewConstraints" >
<EntityTypeMapping TypeName="Store.UniqueConstraint" >
<MappingFragment StoreEntitySet="SViewConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="IsDeferrable" ColumnName="IsDeferrable" />
<ScalarProperty Name="IsInitiallyDeferred" ColumnName="IsInitiallyDeferred" />
<Condition ColumnName="ConstraintType" Value="UNIQUE"/>
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="Store.CheckConstraint" >
<MappingFragment StoreEntitySet="SViewConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="IsDeferrable" ColumnName="IsDeferrable" />
<ScalarProperty Name="IsInitiallyDeferred" ColumnName="IsInitiallyDeferred" />
<ScalarProperty Name="Expression" ColumnName="Expression" />
<Condition ColumnName="ConstraintType" Value="CHECK"/>
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="Store.PrimaryKeyConstraint" >
<MappingFragment StoreEntitySet="SViewConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="IsDeferrable" ColumnName="IsDeferrable" />
<ScalarProperty Name="IsInitiallyDeferred" ColumnName="IsInitiallyDeferred" />
<Condition ColumnName="ConstraintType" Value="PRIMARY KEY"/>
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="Store.ForeignKeyConstraint" >
<MappingFragment StoreEntitySet="SViewConstraints">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="IsDeferrable" ColumnName="IsDeferrable" />
<ScalarProperty Name="IsInitiallyDeferred" ColumnName="IsInitiallyDeferred" />
<ScalarProperty Name="UpdateRule" ColumnName="UpdateRule" />
<ScalarProperty Name="DeleteRule" ColumnName="DeleteRule" />
<Condition ColumnName="ConstraintType" Value="FOREIGN KEY"/>
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="TableForeignKeys" StoreEntitySet="SForeignKeys" TypeName="Store.ForeignKey">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Ordinal" ColumnName="Ordinal" />
</EntitySetMapping>
<EntitySetMapping Name="ViewForeignKeys" StoreEntitySet="SViewForeignKeys" TypeName="Store.ForeignKey">
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="Ordinal" ColumnName="Ordinal" />
</EntitySetMapping>
<AssociationSetMapping Name="TableTableColumns" StoreEntitySet="STableColumns" TypeName="Store.TableOrViewColumn">
<EndProperty Name="Parent">
<ScalarProperty Name="Id" ColumnName="ParentId" />
</EndProperty>
<EndProperty Name="Column">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
<!--Condition ColumnName="ParentId" IsNull="false"/-->
</AssociationSetMapping>
<AssociationSetMapping Name="ViewViewColumns" StoreEntitySet="SViewColumns" TypeName="Store.TableOrViewColumn">
<EndProperty Name="Parent">
<ScalarProperty Name="Id" ColumnName="ParentId" />
</EndProperty>
<EndProperty Name="Column">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="TableTableConstraints" StoreEntitySet="SConstraints" TypeName="Store.TableOrViewConstraint">
<EndProperty Name="Parent">
<ScalarProperty Name="Id" ColumnName="ParentId" />
</EndProperty>
<EndProperty Name="Constraint">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="TableConstraintColumns" StoreEntitySet="SConstraintColumns" TypeName="Store.TableOrViewConstraintColumn">
<EndProperty Name="Constraint">
<ScalarProperty Name="Id" ColumnName="ConstraintId" />
</EndProperty>
<EndProperty Name="Column">
<ScalarProperty Name="Id" ColumnName="ColumnId" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="TableConstraintForeignKeys" StoreEntitySet="SForeignKeys" TypeName="Store.ConstraintForeignKey">
<EndProperty Name="Constraint">
<ScalarProperty Name="Id" ColumnName="ConstraintId" />
</EndProperty>
<EndProperty Name="ForeignKey">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="ToTableForeignKeyColumns" StoreEntitySet="SForeignKeys" TypeName="Store.ToForeignKeyColumn">
<EndProperty Name="ForeignKey">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
<EndProperty Name="Column">
<ScalarProperty Name="Id" ColumnName="ToColumnId" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="FromTableForeignKeyColumns" StoreEntitySet="SForeignKeys" TypeName="Store.FromForeignKeyColumn">
<EndProperty Name="ForeignKey">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
<EndProperty Name="Column">
<ScalarProperty Name="Id" ColumnName="FromColumnId" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="ViewViewConstraints" StoreEntitySet="SViewConstraints" TypeName="Store.TableOrViewConstraint">
<EndProperty Name="Parent">
<ScalarProperty Name="Id" ColumnName="ParentId" />
</EndProperty>
<EndProperty Name="Constraint">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="ViewConstraintColumns" StoreEntitySet="SViewConstraintColumns" TypeName="Store.TableOrViewConstraintColumn">
<EndProperty Name="Constraint">
<ScalarProperty Name="Id" ColumnName="ConstraintId" />
</EndProperty>
<EndProperty Name="Column">
<ScalarProperty Name="Id" ColumnName="ColumnId" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="ViewConstraintForeignKeys" StoreEntitySet="SViewForeignKeys" TypeName="Store.ConstraintForeignKey">
<EndProperty Name="Constraint">
<ScalarProperty Name="Id" ColumnName="ConstraintId" />
</EndProperty>
<EndProperty Name="ForeignKey">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="ToViewForeignKeyColumns" StoreEntitySet="SViewForeignKeys" TypeName="Store.ToForeignKeyColumn">
<EndProperty Name="ForeignKey">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
<EndProperty Name="Column">
<ScalarProperty Name="Id" ColumnName="ToColumnId" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="FromViewForeignKeyColumns" StoreEntitySet="SViewForeignKeys" TypeName="Store.FromForeignKeyColumn">
<EndProperty Name="ForeignKey">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
<EndProperty Name="Column">
<ScalarProperty Name="Id" ColumnName="FromColumnId" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="FunctionFunctionParameters" StoreEntitySet="SFunctionParameters" TypeName="Store.RoutineParameter">
<EndProperty Name="Routine">
<ScalarProperty Name="Id" ColumnName="ParentId" />
</EndProperty>
<EndProperty Name="Parameter">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="FunctionFunctionReturnTableColumns" StoreEntitySet="SFunctionReturnTableColumns" TypeName="Store.FunctionFunctionReturnTableColumn">
<EndProperty Name="Function">
<ScalarProperty Name="Id" ColumnName="ParentId" />
</EndProperty>
<EndProperty Name="Column">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="ProcedureProcedureParameters" StoreEntitySet="SProcedureParameters" TypeName="Store.RoutineParameter">
<EndProperty Name="Routine">
<ScalarProperty Name="Id" ColumnName="ParentId" />
</EndProperty>
<EndProperty Name="Parameter">
<ScalarProperty Name="Id" ColumnName="Id" />
</EndProperty>
</AssociationSetMapping>
</EntityContainerMapping>
</Mapping>

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{EBA0B8A0-6C00-44C2-A8F0-394069B9486B}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SampleEntityFrameworkProvider</RootNamespace>
<AssemblyName>SampleEntityFrameworkProvider</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>SampleEntityFrameworkProvider.snk</AssemblyOriginatorKeyFile>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Data.Entity" />
<Reference Include="System.Diagnostics.Debug" />
<Reference Include="System.Transactions" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="2.0 Provider Code\Command.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="2.0 Provider Code\Connection.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="2.0 Provider Code\Factory.cs" />
<Compile Include="Command.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Connection.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="DdlBuilder.cs" />
<Compile Include="Factory.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ProviderManifest.cs" />
<Compile Include="ProviderServices.cs" />
<Compile Include="SampleProviderFunctions.cs" />
<Compile Include="SpatialDataReader.cs" />
<Compile Include="SpatialServices.cs" />
<Compile Include="SqlGeneration\DmlSqlGenerator.cs" />
<Compile Include="SqlGeneration\ISqlFragment.cs" />
<Compile Include="SqlGeneration\JoinSymbol.cs" />
<Compile Include="SqlGeneration\MetadataHelpers.cs" />
<Compile Include="SqlGeneration\SqlBuilder.cs" />
<Compile Include="SqlGeneration\SqlGenerator.cs" />
<Compile Include="SqlGeneration\SqlSelectStatement.cs" />
<Compile Include="SqlGeneration\SqlWriter.cs" />
<Compile Include="SqlGeneration\Symbol.cs" />
<Compile Include="SqlGeneration\SymbolPair.cs" />
<Compile Include="SqlGeneration\SymbolTable.cs" />
<Compile Include="SqlGeneration\TopClause.cs" />
<Compile Include="SqlTypes.cs" />
<Compile Include="StoreVersion.cs" />
</ItemGroup>
<ItemGroup>
<None Include="SampleEntityFrameworkProvider.snk" />
<EmbeddedResource Include="Resources\SampleProviderServices.StoreSchemaDefinition.ssdl" />
<EmbeddedResource Include="Resources\SampleProviderServices.StoreSchemaMapping.msl" />
<EmbeddedResource Include="Resources\SampleProviderServices.ProviderManifest.xml" />
<Content Include="Changelog.txt" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>"%25ProgramFiles%25\Microsoft SDKs\Windows\v8.0A\Bin\NETFX 4.0 Tools\gacutil.exe" /if "$(TargetFileName)"</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,74 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Data.Spatial;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace SampleEntityFrameworkProvider
{
internal sealed class SqlSpatialDataReader : DbSpatialDataReader
{
private readonly SqlDataReader reader;
static SqlSpatialDataReader()
{
}
public SqlSpatialDataReader(SqlDataReader underlyingReader)
{
this.reader = underlyingReader;
}
public override DbGeography GetGeography(int ordinal)
{
EnsureGeographyColumn(ordinal);
var geographyBytes = this.reader.GetSqlBytes(ordinal);
dynamic geography = Activator.CreateInstance(SqlTypes.SqlGeographyType);
geography.Read(new BinaryReader(geographyBytes.Stream));
return SpatialServices.Instance.GeographyFromProviderValue(geography);
}
public override DbGeometry GetGeometry(int ordinal)
{
EnsureGeometryColumn(ordinal);
var geometryBytes = this.reader.GetSqlBytes(ordinal);
dynamic geometry = Activator.CreateInstance(SqlTypes.SqlGeometryType);
geometry.Read(new BinaryReader(geometryBytes.Stream));
return SpatialServices.Instance.GeometryFromProviderValue(geometry);
}
private void EnsureGeographyColumn(int ordinal)
{
string fieldTypeName = this.reader.GetDataTypeName(ordinal);
if (!fieldTypeName.EndsWith("sys.geography", StringComparison.Ordinal)) // Use EndsWith so that we just see the schema and type name, not the database name.
{
throw new InvalidOperationException(
string.Format(
"Expected a geography value, found a value of type {0}.",
fieldTypeName));
}
}
private void EnsureGeometryColumn(int ordinal)
{
string fieldTypeName = this.reader.GetDataTypeName(ordinal);
if (!fieldTypeName.EndsWith("sys.geometry", StringComparison.Ordinal)) // Use EndsWith so that we just see the schema and type name, not the database name.
{
throw new InvalidOperationException(
string.Format(
"Expected a geometry value, found a value of type {0}.",
fieldTypeName));
}
}
}
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More