Я работаю с EF Core и сталкиваюсь с проблемой при попытке создать DBContext. Согласно сообщению об ошибке: < /p>
Тип объекта 'Cafeid' требует определения первичного ключа. Если вы намеревались использовать тип объекта без ключа, вызовите «hasnokey» в 'onmodelcreating'. p>
public class Cafe : Entity
{
private Cafe() : base(default!) { }
private Cafe(
CafeID cafeId,
string name,
string description,
string location) : base(cafeId)
{
CafeId = cafeId;
Name = name;
Description = description;
Location = location;
}
public CafeID CafeId { get; private set; }
public string Name { get; private set; }
public string Description { get; private set; }
public string Location { get; private set; }
public string? Logo { get; private set; }
public static Result Create(
string name,
string description,
string location,
string? logo = null)
{
if (string.IsNullOrEmpty(name))
{
return Result.Failure(DomainError.Cafe.EmptyName);
}
var cafe = new Cafe(
CafeID.GenerateID(),
name,
description,
location)
{
Logo = logo
};
return cafe;
}
}
< /code>
record Cafeid < /p>
public record CafeID
{
private CafeID() { }
public CafeID(Guid value) => Value = value;
public static CafeID GenerateID() => new(Guid.NewGuid());
public Guid Value { get; }
public static Result Create(Guid value)
{
if (value == Guid.Empty)
{
return Result.Failure(Error.Null);
}
return new CafeID(value);
}
}
< /code>
Конфигурация объекта < /p>
public class DbSetCafe : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.ToTable("cafe");
builder.HasKey(c => c.CafeId);
builder.Property(c => c.CafeId)
.HasConversion(); // Custom ValueConverter
builder.Property(c => c.Name)
.HasMaxLength(100)
.IsRequired();
builder.Property(c => c.Description)
.HasMaxLength(500)
.IsRequired();
builder.Property(c => c.Location)
.HasMaxLength(200)
.IsRequired();
builder.Property(c => c.Logo)
.HasMaxLength(2000);
builder.HasMany()
.WithOne()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade);
}
}
< /code>
преобразователь < /p>
public class CafeIdConvertor : ValueConverter
{
public CafeIdConvertor() : base(IN => IN.Value,
OUT => new CafeId(OUT))
{
}
}
< /code>
то, что я попробовал < /strong> < /p>
Определенный кафе как тип записи, но EF Ядро, по -видимому, рассматривает его как объект
, а не как объект значения. < /Li>
Использует ValueConverter (CafeidConvertor) для картирования Cafeid для Guid. < /Li>
< /ul>
Существует ли рекомендуемый подход для использования сильно напечатанного идентификатора при обеспечении правильного его распознавания EF? < /p>
Подробнее здесь: https://stackoverflow.com/questions/794 ... be-defined
Проблема с EF Core: «Тип объекта требует определения первичного ключа» ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Тип сущности «IdentityUserLogin
» требует определения первичного ключа [дубликат]
Anonymous » » в форуме C# - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-