Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.Data.Entity / System / Data / Common / EntityRecordInfo.cs
1 //------------------------------------------------------------------------------
2 // <copyright file="EntityRecordInfo.cs" company="Microsoft">
3 //      Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">Microsoft</owner>
6 // <owner current="true" primary="false">Microsoft</owner>
7 //------------------------------------------------------------------------------
8
9 namespace System.Data.Common {
10
11     using System.Collections.Generic;
12     using System.Data;
13     using System.Data.Metadata.Edm;
14     using System.Diagnostics;
15
16     /// <summary>
17     /// EntityRecordInfo class providing a simple way to access both the type information and the column information.
18     /// </summary>
19     public class EntityRecordInfo : DataRecordInfo {
20
21         private readonly EntityKey _entityKey;
22         private readonly EntitySet _entitySet;
23
24         /// <summary>
25         /// 
26         /// </summary>
27         /// <param name="metadata"></param>
28         /// <param name="memberInfo"></param>
29         /// <param name="entityKey"></param>
30         public EntityRecordInfo(EntityType metadata, IEnumerable<EdmMember> memberInfo, EntityKey entityKey, EntitySet entitySet)
31             : base(TypeUsage.Create(metadata), memberInfo) {
32             EntityUtil.CheckArgumentNull<EntityKey>(entityKey, "entityKey");
33             EntityUtil.CheckArgumentNull(entitySet, "entitySet");
34
35             _entityKey = entityKey;
36             _entitySet = entitySet;
37             ValidateEntityType(entitySet);
38         }
39
40         /// <summary>
41         /// 
42         /// </summary>
43         /// <param name="metadata"></param>
44         /// <param name="entityKey"></param>
45         internal EntityRecordInfo(EntityType metadata, EntityKey entityKey, EntitySet entitySet)
46             : base(TypeUsage.Create(metadata)) {
47             EntityUtil.CheckArgumentNull<EntityKey>(entityKey, "entityKey");
48
49             _entityKey = entityKey;
50             _entitySet = entitySet;
51 #if DEBUG
52             try
53             {
54                 ValidateEntityType(entitySet);
55             }
56             catch
57             {
58                 Debug.Assert(false, "should always be valid EntityType when internally constructed");
59                 throw;
60             }
61 #endif
62         }
63         
64         /// <summary>
65         /// Reusing TypeUsage and FieldMetadata from another EntityRecordInfo which has all the same info
66         /// but with a different EntityKey instance.
67         /// </summary>
68         internal EntityRecordInfo(DataRecordInfo info, EntityKey entityKey, EntitySet entitySet)
69             : base(info)
70         {
71             _entityKey = entityKey;
72             _entitySet = entitySet;
73 #if DEBUG
74             try
75             {
76                 ValidateEntityType(entitySet);
77             }
78             catch
79             {
80                 Debug.Assert(false, "should always be valid EntityType when internally constructed");
81                 throw;
82             }
83 #endif
84         }
85
86         /// <summary>
87         /// the EntityKey
88         /// </summary>
89         public EntityKey EntityKey {
90             get {
91                 return _entityKey;
92             }
93         }
94
95         // using EntitySetBase versus EntitySet prevents the unnecessary cast of ElementType to EntityType
96         private void ValidateEntityType(EntitySetBase entitySet)
97         {
98             if (!object.ReferenceEquals(RecordType.EdmType, null) &&
99                 !object.ReferenceEquals(_entityKey, EntityKey.EntityNotValidKey) &&
100                 !object.ReferenceEquals(_entityKey, EntityKey.NoEntitySetKey) &&
101                 !object.ReferenceEquals(RecordType.EdmType, entitySet.ElementType) &&
102                 !entitySet.ElementType.IsBaseTypeOf(RecordType.EdmType))
103             {
104                 throw EntityUtil.Argument(System.Data.Entity.Strings.EntityTypesDoNotAgree);
105             }
106         }
107     }
108 }