@@ -813,37 +813,62 @@ public override void Can_configure_owned_type()
813
813
{
814
814
var modelBuilder = CreateModelBuilder ( ) ;
815
815
816
- var ownedBuilder = modelBuilder . Entity < Customer > ( ) . OwnsOne ( c => c . Details )
817
- . ToTable ( "CustomerDetails" )
816
+ modelBuilder . Ignore < Customer > ( ) ;
817
+ modelBuilder . Ignore < Product > ( ) ;
818
+
819
+ var ownedBuilder = modelBuilder . Entity < OtherCustomer > ( ) . OwnsOne ( c => c . Details )
820
+ . ToTable ( "OtherCustomerDetails" )
818
821
. HasCheckConstraint ( "CK_CustomerDetails_T" , "AlternateKey <> 0" , c => c . HasName ( "CK_Guid" ) ) ;
819
822
ownedBuilder . Property ( d => d . CustomerId ) ;
820
823
ownedBuilder . HasIndex ( d => d . CustomerId ) ;
821
- ownedBuilder . WithOwner ( d => d . Customer )
824
+ ownedBuilder . WithOwner ( d => ( OtherCustomer ) d . Customer )
822
825
. HasPrincipalKey ( c => c . AlternateKey ) ;
823
826
827
+ modelBuilder . Entity < SpecialCustomer > ( ) . OwnsOne ( c => c . Details , b =>
828
+ {
829
+ b . ToTable ( "SpecialCustomerDetails" ) ;
830
+ b . HasCheckConstraint ( "CK_CustomerDetails_T" , "AlternateKey <> 0" , c => c . HasName ( "CK_Guid" ) ) ;
831
+ b . Property ( d => d . CustomerId ) ;
832
+ b . HasIndex ( d => d . CustomerId ) ;
833
+ b . WithOwner ( d => ( SpecialCustomer ) d . Customer )
834
+ . HasPrincipalKey ( c => c . AlternateKey ) ;
835
+ } ) ;
836
+
824
837
var model = modelBuilder . FinalizeModel ( ) ;
825
838
826
- var owner = model . FindEntityType ( typeof ( Customer ) ) ;
827
- Assert . Equal ( typeof ( Customer ) . FullName , owner . Name ) ;
828
- var ownership = owner . FindNavigation ( nameof ( Customer . Details ) ) . ForeignKey ;
829
- Assert . True ( ownership . IsOwnership ) ;
830
- Assert . Equal ( nameof ( Customer . Details ) , ownership . PrincipalToDependent . Name ) ;
831
- Assert . Equal ( "CustomerAlternateKey" , ownership . Properties . Single ( ) . Name ) ;
832
- Assert . Equal ( nameof ( Customer . AlternateKey ) , ownership . PrincipalKey . Properties . Single ( ) . Name ) ;
833
- var owned = ownership . DeclaringEntityType ;
834
- Assert . Same ( ownedBuilder . OwnedEntityType , owned ) ;
835
- Assert . Equal ( "CustomerDetails" , owned . GetTableName ( ) ) ;
836
- var checkConstraint = owned . GetCheckConstraints ( ) . Single ( ) ;
837
- Assert . Equal ( "CK_CustomerDetails_T" , checkConstraint . ModelName ) ;
838
- Assert . Equal ( "AlternateKey <> 0" , checkConstraint . Sql ) ;
839
- Assert . Equal ( "CK_Guid" , checkConstraint . Name ) ;
840
- Assert . Single ( owned . GetForeignKeys ( ) ) ;
841
- Assert . Equal ( nameof ( CustomerDetails . CustomerId ) , owned . GetIndexes ( ) . Single ( ) . Properties . Single ( ) . Name ) ;
842
- Assert . Equal (
843
- new [ ] { "CustomerAlternateKey" , nameof ( CustomerDetails . CustomerId ) , nameof ( CustomerDetails . Id ) } ,
844
- owned . GetProperties ( ) . Select ( p => p . Name ) ) ;
845
- Assert . NotNull ( model . FindEntityType ( typeof ( CustomerDetails ) ) ) ;
846
- Assert . Equal ( 1 , model . GetEntityTypes ( ) . Count ( e => e . ClrType == typeof ( CustomerDetails ) ) ) ;
839
+ var owner1 = model . FindEntityType ( typeof ( OtherCustomer ) ) ;
840
+ Assert . Equal ( typeof ( OtherCustomer ) . FullName , owner1 . Name ) ;
841
+ AssertOwnership ( owner1 ) ;
842
+
843
+ var owner2 = model . FindEntityType ( typeof ( SpecialCustomer ) ) ;
844
+ Assert . Equal ( typeof ( SpecialCustomer ) . FullName , owner2 . Name ) ;
845
+ AssertOwnership ( owner2 ) ;
846
+
847
+ Assert . Null ( model . FindEntityType ( typeof ( CustomerDetails ) ) ) ;
848
+ Assert . Equal ( 2 , model . GetEntityTypes ( ) . Count ( e => e . ClrType == typeof ( CustomerDetails ) ) ) ;
849
+
850
+ static void AssertOwnership ( IEntityType owner )
851
+ {
852
+ var ownership1 = owner . FindNavigation ( nameof ( Customer . Details ) ) . ForeignKey ;
853
+ Assert . True ( ownership1 . IsOwnership ) ;
854
+ Assert . Equal ( nameof ( Customer . Details ) , ownership1 . PrincipalToDependent . Name ) ;
855
+ Assert . Equal ( "CustomerAlternateKey" , ownership1 . Properties . Single ( ) . Name ) ;
856
+ Assert . Equal ( nameof ( Customer . AlternateKey ) , ownership1 . PrincipalKey . Properties . Single ( ) . Name ) ;
857
+ var owned = ownership1 . DeclaringEntityType ;
858
+ Assert . Equal ( owner . ShortName ( ) + "Details" , owned . GetTableName ( ) ) ;
859
+ var checkConstraint = owned . GetCheckConstraints ( ) . Single ( ) ;
860
+ Assert . Same ( owned , checkConstraint . EntityType ) ;
861
+ Assert . Equal ( "CK_CustomerDetails_T" , checkConstraint . ModelName ) ;
862
+ Assert . Equal ( "AlternateKey <> 0" , checkConstraint . Sql ) ;
863
+ Assert . Equal ( "CK_Guid" , checkConstraint . Name ) ;
864
+ Assert . Single ( owned . GetForeignKeys ( ) ) ;
865
+ var index = owned . GetIndexes ( ) . Single ( ) ;
866
+ Assert . Same ( owned , index . DeclaringEntityType ) ;
867
+ Assert . Equal ( nameof ( CustomerDetails . CustomerId ) , index . Properties . Single ( ) . Name ) ;
868
+ Assert . Equal (
869
+ new [ ] { "CustomerAlternateKey" , nameof ( CustomerDetails . CustomerId ) , nameof ( CustomerDetails . Id ) } ,
870
+ owned . GetProperties ( ) . Select ( p => p . Name ) ) ;
871
+ }
847
872
}
848
873
849
874
[ ConditionalFact ]
0 commit comments