//---------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
namespace System.Data.Entity.Design
{
using System.Data.Entity;
using System.Data.EntityModel;
using System.Xml;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Metadata.Edm;
using System.Data.Mapping;
using System.Data.Entity.Design.Common;
using Microsoft.Build.Utilities;
using System.Data.Entity.Design.SsdlGenerator;
using System.Diagnostics;
using System.Linq;
///
/// Factory for creating ItemCollections. This class is to be used for
/// design time scenarios. The consumers of the methods in this class
/// will get an error list instead of an exception if there are errors in schema files.
///
[CLSCompliant(false)]
public static class MetadataItemCollectionFactory
{
///
/// Create an EdmItemCollection with the passed in parameters.
/// Add any errors caused during the ItemCollection creation
/// to the error list passed in.
///
///
///
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")]
public static EdmItemCollection CreateEdmItemCollection(IEnumerable readers,
out IList errors)
{
System.Collections.ObjectModel.ReadOnlyCollection filePaths = null;
return new EdmItemCollection(readers, filePaths, out errors);
}
///
/// Create an EdmItemCollection with the passed in parameters.
/// Add any errors caused during the ItemCollection creation
/// to the error list passed in.
///
///
///
///
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")]
public static EdmItemCollection CreateEdmItemCollection(IEnumerable readers,
Version targetEntityFrameworkVersion,
out IList errors)
{
EDesignUtil.CheckTargetEntityFrameworkVersionArgument(targetEntityFrameworkVersion, "targetEntityFrameworkVersion");
EdmItemCollection edmItemCollection = CreateEdmItemCollection(readers, out errors);
if (!errors.Any(e => e.Severity == EdmSchemaErrorSeverity.Error))
{
ValidateActualVersionAgainstTarget(targetEntityFrameworkVersion, EntityFrameworkVersionsUtil.ConvertToVersion(edmItemCollection.EdmVersion), errors);
}
return edmItemCollection;
}
internal static bool ValidateActualVersionAgainstTarget(Version maxExpectedVersion, Version actualVersion, IList errors)
{
if (!(actualVersion <= maxExpectedVersion))
{
errors.Add(new EdmSchemaError(Strings.TargetVersionSchemaVersionMismatch(maxExpectedVersion, actualVersion), (int)ModelBuilderErrorCode.SchemaVersionHigherThanTargetVersion, EdmSchemaErrorSeverity.Error));
return false;
}
return true;
}
///
/// Create an StoreItemCollection with the passed in parameters.
/// Add any errors caused during the ItemCollection creation
/// to the error list passed in.
///
///
///
///
///
public static StoreItemCollection CreateStoreItemCollection(IEnumerable readers,
out IList errors)
{
return new StoreItemCollection(readers, null, out errors);
}
///
/// Create an StoreItemCollection with the passed in parameters.
/// Add any errors caused during the ItemCollection creation
/// to the error list passed in.
///
///
///
///
///
///
public static StoreItemCollection CreateStoreItemCollection(
IEnumerable readers,
Version targetEntityFrameworkVersion,
out IList errors)
{
EDesignUtil.CheckTargetEntityFrameworkVersionArgument(targetEntityFrameworkVersion, "targetEntityFrameworkVersion");
return CreateStoreItemCollection(readers, out errors);
}
///
/// Create a StorageMappingItemCollection with the passed in parameters.
/// Add any errors caused during the ItemCollection creation
/// to the error list passed in.
///
///
///
///
///
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "edm")]
public static StorageMappingItemCollection CreateStorageMappingItemCollection(EdmItemCollection edmCollection,
StoreItemCollection storeCollection, IEnumerable readers, out IList errors)
{
return new StorageMappingItemCollection(edmCollection, storeCollection, readers, null, out errors);
}
///
/// Create a StorageMappingItemCollection with the passed in parameters.
/// Add any errors caused during the ItemCollection creation
/// to the error list passed in.
///
///
///
///
///
///
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "edm")]
public static StorageMappingItemCollection CreateStorageMappingItemCollection(
EdmItemCollection edmCollection,
StoreItemCollection storeCollection,
IEnumerable readers,
Version targetEntityFrameworkVersion,
out IList errors)
{
EDesignUtil.CheckArgumentNull(edmCollection, "edmCollection");
EDesignUtil.CheckArgumentNull(storeCollection, "storeCollection");
EDesignUtil.CheckArgumentNull(readers, "readers");
EDesignUtil.CheckTargetEntityFrameworkVersionArgument(targetEntityFrameworkVersion, "targetEntityFrameworkVersion");
if (EntityFrameworkVersionsUtil.ConvertToVersion(edmCollection.EdmVersion) > targetEntityFrameworkVersion)
{
throw EDesignUtil.Argument("edmCollection");
}
StorageMappingItemCollection storageMappingItemCollection = CreateStorageMappingItemCollection(edmCollection, storeCollection, readers, out errors);
if (!errors.Any(e => e.Severity == EdmSchemaErrorSeverity.Error))
{
ValidateActualVersionAgainstTarget(targetEntityFrameworkVersion, EntityFrameworkVersionsUtil.ConvertToVersion(storageMappingItemCollection.MappingVersion), errors);
}
return storageMappingItemCollection;
}
}
}