0

我的实体是从 Entity 类派生的,所以默认情况下它应该有一个 int 类型的 id,但由于某种原因 EntityFramework 无法识别它。我什至尝试手动设置我的主键(已注释掉),但它仍然无法正常工作。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
using Abp.Domain.Entities;
using Abp.Domain.Entities.Auditing;
using Abp.Timing;

namespace Test.Models
{

    [Table("AppTasks")]
    public class Task : Entity, IHasCreationTime
    {
        //[Key]
        //public int Id { get; set; }

        public const int MaxTitleLength = 256;
        public const int MaxDescriptionLength = 64 * 1024;



        [Required]
        [StringLength(MaxTitleLength)]
        public string Title { get; set; }


        [StringLength(MaxDescriptionLength)]
        public string Description { get; set; }

        public TaskState State { get; set; }

        public DateTime CreationTime { get; set; }

        public Task()
        {
            CreationTime = Clock.Now;
            State = TaskState.Open;
        }

        public Task(string title, string description = null) : this()
        {
            Title = title;
            Description = description;
        }
    }

    public enum TaskState : byte
    {
        Open = 0,
        Completed = 1
    }
}
4

1 回答 1

0

尝试使用混凝土IEntityTypeConfiguration<T>

public class TaskConfiguration : IEntityTypeConfiguration<Task>
{
    public void Configure(EntityTypeBuilder<Task> builder)
    {
        builder.HasKey(tsk => tsk.Id);
        //builder.HasMany(...) relationships et al.
    }
}

在您的DbContext定义中(或您所称的任何内容):

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.ApplyConfiguration(new TaskConfiguration());
}

这绝对应该以某种方式配置 EFCore,这Id将是该实体的主键。作为一个额外的好处,您可以获得更多的灵活性和更简洁的代码。

于 2019-05-06T09:30:02.507 回答