Hello,
I have a similar problem with Key and ForeignKey. I m trying to apply DDD principle but i m working on database with auto generated sequence. Has I want to always have a unique key without getting next value in sequence at entity creation.
I have a create my own Identity Object :
I have a similar problem with Key and ForeignKey. I m trying to apply DDD principle but i m working on database with auto generated sequence. Has I want to always have a unique key without getting next value in sequence at entity creation.
I have a create my own Identity Object :
public class Identity<TIdentity> where TIdentity : struct
{
public TIdentity BaseIdentity { get; protected set; }
private Guid AutoGeneratedIdentity { get; set; }
protected Identity()
{
}
public Identity(TIdentity identite)
{
this.BaseIdentity = identite;
}
public Identity(Guid guid)
{
this.AutoGeneratedIdentity = guid;
DomainEvents.Register<IdentityChangedEvent<TIdentity>>(this.IdentityChanged);
}
private void IdentityChanged(IdentityChangedEvent<TIdentity> changedEvent)
{
if(!this.BaseIdentity.Equals(default(TIdentity))) return;
if (this.Equals(changedEvent.Identity))
{
this.BaseIdentity = changedEvent.Identity.BaseIdentity;
}
}
public void DefinirLidente(TIdentity identite)
{
BaseIdentity = identite;
DomainEvents.Raise(new IdentityChangedEvent<TIdentity>(this));
}
public static Identity<TIdentity> CreeUneIdentity()
{
return new Identity<TIdentity>(Guid.NewGuid());
}
public override bool Equals(object obj)
{
var identity = obj as Identity<TIdentity>;
return this.Equals(identity);
}
public bool Equals(Identity<TIdentity> identity)
{
if (identity == null)
{
return false;
}
if (this.BaseIdentity.Equals(default(TIdentity)) || identity.BaseIdentity.Equals(default(TIdentity)))
{
return this.AutoGeneratedIdentity.Equals(identity.AutoGeneratedIdentity);
}
return this.BaseIdentity.Equals(identity.BaseIdentity);
}
public override int GetHashCode()
{
return this.BaseIdentity.Equals(default(TIdentity)) ? this.AutoGeneratedIdentity.GetHashCode() : this.BaseIdentity.GetHashCode();
}
public override string ToString()
{
return string.Format("Identite : {0}",
this.BaseIdentity.Equals(default(TIdentity))
? this.AutoGeneratedIdentity.ToString()
: this.BaseIdentity.ToString());
}
public static implicit operator TIdentity(Identity<TIdentity> identity)
{
return identity.BaseIdentity;
}
public static implicit operator Identity<TIdentity>(TIdentity identity)
{
return new Identity<TIdentity>(identity);
}
}
But as I can't affect Key or Foreign Key to this object, I need to had this property foreach Key or Foreign Key and it s working but would be cleaner if I didn't need it. public decimal BaseId
{
get { return this.Id.BaseIdentity; }
protected set
{
if(!value.Equals(this.Id.BaseIdentity))
this.Id = value;
}
}