【发布时间】:2021-08-11 13:04:23
【问题描述】:
我创建了一个 ASP.NET Blazor 服务器项目。
我创建了一个模型类、一个服务类和一个 DbContext 类。 我还创建了一个 SQL 数据库并在 appsettings.json 和 startup.cs 上连接到它。
下面是我在 Startup.cs 中 IConfiguration Configuration { get; } 下的代码:
services.AddScoped<ClassNameService>(); //connect to business logic
#region Connection String
services.AddDbContext<AppDBContext>(item => item.UseSqlServer(Configuration.GetConnectionString("DatabaseName")));
#endregion
当我在包管理器控制台中输入以下代码时:
Add-Migration DatabaseName -Context DbContextName
我收到以下错误消息:
实体类型“DisplayFormatAttribute”需要定义一个主键。如果您打算使用无密钥实体类型,请在“OnModelCreating”中调用“HasNoKey”。有关无密钥实体类型的更多信息,请参阅https://go.microsoft.com/fwlink/?linkid=2141943。
问题是我确实在 ModelName.cs 中有一个主键:
public class ContactPerson
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Designation { get; set; }
public string Company { get; set; }
public PhoneAttribute Mobile { get; set; }
public PhoneAttribute Landline { get; set; }
public EmailAddressAttribute Email { get; set; }
public string Address { get; set; }
}
Id 是这里的主键。
下面是 DbContext 和 Service 类代码:
public class AppDBContext:DbContext
{
public AppDBContext(DbContextOptions<AppDBContext> options) : base(options)
{
}
public DbSet<ContactPerson> ContactPeople { get; set; }
}
public class ContactPersonService
{
#region Property
private readonly AppDBContext _appDBContext;
#endregion
#region Constructor
public ContactPersonService(AppDBContext appDBContext)
{
_appDBContext = appDBContext;
}
#endregion
#region Get List of ContactPeople
public async Task<List<ContactPerson>> GetAllContactPeopleAsync()
{
return await _appDBContext.ContactPeople.ToListAsync();
}
#endregion
#region Insert ContactPerson
public async Task<bool> InsertContactPersonAsync(ContactPerson contactperson)
{
await _appDBContext.ContactPeople.AddAsync(contactperson);
await _appDBContext.SaveChangesAsync();
return true;
}
#endregion
#region Get ContactPerson by Id
public async Task<ContactPerson> GetContactPersonAsync(int Id)
{
ContactPerson contactperson = await _appDBContext.ContactPeople.FirstOrDefaultAsync(c => c.Id.Equals(Id));
return contactperson;
}
#endregion
#region Update ContactPerson
public async Task<bool> UpdateContactPersonAsync(ContactPerson contactperson)
{
_appDBContext.ContactPeople.Update(contactperson);
await _appDBContext.SaveChangesAsync();
return true;
}
#endregion
#region DeleteContactPerson
public async Task<bool> DeleteContactPersonAsync(ContactPerson contactperson)
{
_appDBContext.Remove(contactperson);
await _appDBContext.SaveChangesAsync();
return true;
}
#endregion
}
那么为什么我会收到此错误消息以及如何解决此问题?
【问题讨论】:
-
什么只有一张桌子?为什么您决定 ContactPerson 导致错误?例如,我看到您有 PhoneAttribute 。是枚举吗?
-
@Serge 一旦这部分工作正常,我将添加更多表格。我假设问题可能出在 ContactPerson 中,但我不确定。 PhoneAttribute 是 System.ComponentModel.DataAnnotations 命名空间中的一个类。
-
如果 PhoneAttribute 是一个类,则需要修复 ContactPerson 类。这是一个错误。请发布其余的课程。
-
@Serge 我贴出来了。
-
谢谢,但我说的是课程。您的 dbcontext 中是否只有 public DbSet
ContactPeople 而没有其他内容?抱歉,我得再问一次 PhoneAttribute 是枚举还是类?
标签: c# entity-framework-core database-migration entity-framework-migrations blazor-server-side