【发布时间】:2020-03-09 12:44:13
【问题描述】:
我有这个ValueObject:
public class Access : ValueObject<Access>
{
public string ControllName { get; set; }
public string ActionName { get; set; }
private Access()
{
}
public Access(string controllerName, string actionName)
{
ControllName = controllerName;
ActionName = actionName;
}
protected override IEnumerable<object> GetEqualityComponents()
{
yield return ControllName;
yield return ActionName;
}
}
这是我的ValueObject<Access>:
public abstract class ValueObject<T>
where T : ValueObject<T>
{
protected abstract IEnumerable<object> GetEqualityComponents();
public override bool Equals(object obj)
{
var valueObject = obj as T;
if (ReferenceEquals(valueObject, null))
return false;
return IsEquals(valueObject);
}
private bool IsEquals(ValueObject<T> other)
{
return GetEqualityComponents().SequenceEqual(other.GetEqualityComponents());
}
public override int GetHashCode()
{
return GetEqualityComponents()
.Aggregate(1, (current, obj) => current * 23 + (obj?.GetHashCode() ?? 0));
}
public static bool operator ==(ValueObject<T> a, ValueObject<T> b)
{
if (ReferenceEquals(a, null) && ReferenceEquals(b, null))
return true;
if (ReferenceEquals(a, null) || ReferenceEquals(b, null))
return false;
return a.Equals(b);
}
public static bool operator !=(ValueObject<T> a, ValueObject<T> b)
{
return !(a == b);
}
}
这是我的 DBContext :
public class StoreAdminPanelGetwayContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlServer(@"Server=.; initial catalog=StoreAdminPanelGetway;integrated security=true");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfigurationsFromAssembly(typeof(Role).Assembly);
}
public DbSet<Role> Roles { get; set; }
public DbSet<AccessLevel> AccessLevels { get; set; }
}
这是我的实体:
public class AccessLevel : Entity
{
public int RoleId { get; set; }
public Access Access { get; set; }
public Role Role { get; set; }
}
但是当我需要add-migration initial 数据库时,它会显示这个错误:
实体类型“Access”需要定义一个主键。如果您打算使用无密钥实体类型调用“HasNoKey()”。
但 Access 是值对象,它不能有 id 。我该如何解决这个问题???
【问题讨论】:
标签: c# asp.net entity-framework entity-framework-core domain-driven-design