@@ -85,7 +85,7 @@ public class AnotherManualInheritor : Manual
8585 }
8686
8787 [ HierarchyRoot ]
88- public class Auto : Base
88+ public class DateTimeVersionAuto : Base
8989 {
9090 [ Field , Key ]
9191 public int Id { get ; private set ; }
@@ -95,7 +95,25 @@ public class Auto : Base
9595 public DateTime Date { get ; set ; }
9696 }
9797
98- public class AutoInheritor : Auto
98+ public class DateTimeAutoInheritor : DateTimeVersionAuto
99+ {
100+ [ Field ]
101+ [ Version ( VersionMode . Auto ) ]
102+ public Guid Uid { get ; set ; }
103+ }
104+
105+ [ HierarchyRoot ]
106+ public class LongVersionAuto : Base
107+ {
108+ [ Field , Key ]
109+ public int Id { get ; private set ; }
110+
111+ [ Field ]
112+ [ Version ( VersionMode . Auto ) ]
113+ public long Version { get ; set ; }
114+ }
115+
116+ public class LongAutoInheritor : LongVersionAuto
99117 {
100118 [ Field ]
101119 [ Version ( VersionMode . Auto ) ]
@@ -315,24 +333,26 @@ public void ManualTest()
315333 [ Test ]
316334 public void AutoTest ( )
317335 {
336+ Require . ProviderIsNot ( StorageProvider . MySql , "DateTime type has less precision on server side" ) ;
337+
318338 var config = DomainConfigurationFactory . Create ( ) ;
319339 config . Types . Register ( typeof ( Base ) ) ;
320- config . Types . Register ( typeof ( Auto ) ) ;
321- config . Types . Register ( typeof ( AutoInheritor ) ) ;
340+ config . Types . Register ( typeof ( DateTimeVersionAuto ) ) ;
341+ config . Types . Register ( typeof ( DateTimeAutoInheritor ) ) ;
322342 var domain = Domain . Build ( config ) ;
323- var autoTypeInfo = domain . Model . Types [ typeof ( Auto ) ] ;
324- var autoInheritorTypeInfo = domain . Model . Types [ typeof ( AutoInheritor ) ] ;
343+ var autoTypeInfo = domain . Model . Types [ typeof ( DateTimeVersionAuto ) ] ;
344+ var autoInheritorTypeInfo = domain . Model . Types [ typeof ( DateTimeAutoInheritor ) ] ;
325345 Assert . AreEqual ( 1 , autoTypeInfo . GetVersionColumns ( ) . Count ) ;
326346 Assert . AreEqual ( 2 , autoInheritorTypeInfo . GetVersionColumns ( ) . Count ) ;
327347 using ( var session = domain . OpenSession ( ) ) {
328348 var versions = new VersionSet ( ) ;
329349 var updatedVersions = new VersionSet ( ) ;
330- Auto auto ;
331- AutoInheritor autoInheritor ;
350+ DateTimeVersionAuto auto ;
351+ DateTimeAutoInheritor autoInheritor ;
332352 using ( VersionCapturer . Attach ( session , versions ) )
333353 using ( var t = session . OpenTransaction ( ) ) {
334- auto = new Auto ( ) { Content = "Content" , Tag = "Tag" } ;
335- autoInheritor = new AutoInheritor ( ) { Content = "Content" , Tag = "Tag" } ;
354+ auto = new DateTimeVersionAuto ( ) { Content = "Content" , Tag = "Tag" } ;
355+ autoInheritor = new DateTimeAutoInheritor ( ) { Content = "Content" , Tag = "Tag" } ;
336356 t . Complete ( ) ;
337357 }
338358 using ( VersionCapturer . Attach ( session , updatedVersions ) )
@@ -363,11 +383,11 @@ public void AutoTest()
363383 using ( var session = domain . OpenSession ( ) )
364384 using ( VersionCapturer . Attach ( session , allVersions ) )
365385 using ( VersionValidator . Attach ( session , allVersions ) ) {
366- Auto auto ;
367- AutoInheritor autoInheritor ;
386+ DateTimeVersionAuto auto ;
387+ DateTimeAutoInheritor autoInheritor ;
368388 using ( var t = session . OpenTransaction ( ) ) {
369- auto = new Auto ( ) { Content = "Content" , Tag = "Tag" } ;
370- autoInheritor = new AutoInheritor ( ) { Content = "Content" , Tag = "Tag" } ;
389+ auto = new DateTimeVersionAuto ( ) { Content = "Content" , Tag = "Tag" } ;
390+ autoInheritor = new DateTimeAutoInheritor ( ) { Content = "Content" , Tag = "Tag" } ;
371391 t . Complete ( ) ;
372392 }
373393 using ( var t = session . OpenTransaction ( ) ) {
@@ -384,7 +404,83 @@ public void AutoTest()
384404 t . Complete ( ) ;
385405 }
386406 }
407+ }
408+
409+ [ Test ]
410+ public void AutoTestNoDateTime ( )
411+ {
412+ Require . ProviderIs ( StorageProvider . MySql , "DateTime type has less precision on server side" ) ;
413+
414+ var config = DomainConfigurationFactory . Create ( ) ;
415+ config . Types . Register ( typeof ( Base ) ) ;
416+ config . Types . Register ( typeof ( LongVersionAuto ) ) ;
417+ config . Types . Register ( typeof ( LongAutoInheritor ) ) ;
418+ var domain = Domain . Build ( config ) ;
419+ var autoTypeInfo = domain . Model . Types [ typeof ( LongVersionAuto ) ] ;
420+ var autoInheritorTypeInfo = domain . Model . Types [ typeof ( LongAutoInheritor ) ] ;
421+ Assert . AreEqual ( 1 , autoTypeInfo . GetVersionColumns ( ) . Count ) ;
422+ Assert . AreEqual ( 2 , autoInheritorTypeInfo . GetVersionColumns ( ) . Count ) ;
423+ using ( var session = domain . OpenSession ( ) ) {
424+ var versions = new VersionSet ( ) ;
425+ var updatedVersions = new VersionSet ( ) ;
426+ LongVersionAuto auto ;
427+ LongAutoInheritor autoInheritor ;
428+ using ( VersionCapturer . Attach ( session , versions ) )
429+ using ( var t = session . OpenTransaction ( ) ) {
430+ auto = new LongVersionAuto ( ) { Content = "Content" , Tag = "Tag" } ;
431+ autoInheritor = new LongAutoInheritor ( ) { Content = "Content" , Tag = "Tag" } ;
432+ t . Complete ( ) ;
433+ }
434+ using ( VersionCapturer . Attach ( session , updatedVersions ) )
435+ using ( VersionValidator . Attach ( session , versions ) )
436+ using ( var t = session . OpenTransaction ( ) ) {
437+ auto . Content = "AnotherContent" ;
438+ auto . Content = "AnotherContetnCorrect" ;
439+ autoInheritor . Content = "AnotherContent" ;
440+ autoInheritor . Content = "AnotherContetnCorrect" ;
441+ t . Complete ( ) ;
442+ }
443+ AssertEx . Throws < VersionConflictException > ( ( ) => {
444+ using ( VersionValidator . Attach ( session , versions ) )
445+ using ( var t = session . OpenTransaction ( ) ) {
446+ auto . Tag = "AnotherTag" ;
447+ autoInheritor . Tag = "AnotherTag" ;
448+ t . Complete ( ) ;
449+ }
450+ } ) ;
451+
452+ using ( VersionValidator . Attach ( session , updatedVersions ) )
453+ using ( var t = session . OpenTransaction ( ) ) {
454+ auto . Tag = "AnotherTag" ;
455+ autoInheritor . Tag = "AnotherTag" ;
456+ t . Complete ( ) ;
457+ }
458+ }
459+ var allVersions = new VersionSet ( ) ;
460+ using ( var session = domain . OpenSession ( ) )
461+ using ( VersionCapturer . Attach ( session , allVersions ) )
462+ using ( VersionValidator . Attach ( session , allVersions ) ) {
463+ LongVersionAuto auto ;
464+ LongAutoInheritor autoInheritor ;
465+ using ( var t = session . OpenTransaction ( ) ) {
466+ auto = new LongVersionAuto ( ) { Content = "Content" , Tag = "Tag" } ;
467+ autoInheritor = new LongAutoInheritor ( ) { Content = "Content" , Tag = "Tag" } ;
468+ t . Complete ( ) ;
469+ }
470+ using ( var t = session . OpenTransaction ( ) ) {
471+ auto . Content = "AnotherContent" ;
472+ auto . Content = "AnotherContetnCorrect" ;
473+ autoInheritor . Content = "AnotherContent" ;
474+ autoInheritor . Content = "AnotherContetnCorrect" ;
475+ t . Complete ( ) ;
476+ }
387477
478+ using ( var t = session . OpenTransaction ( ) ) {
479+ auto . Tag = "AnotherTag" ;
480+ autoInheritor . Tag = "AnotherTag" ;
481+ t . Complete ( ) ;
482+ }
483+ }
388484 }
389485
390486 [ Test ]
0 commit comments