Shamsi Shakeeb
Shamsi Shakeeb

Reputation: 59

Entity Frameworks Creates Auto Column

I am having a problem in Entity Framework. Entity Framework is generating auto column in sql-server and I am not geting how to make insert operation in that particuler column. For Example in Teacher class,

   public class Teacher
   {
    [Key]
    public String Email { set; get; }

    public String Name { set; get; }

    public List<TeacherBasicInformation> Teacher_Basic_Information { set; get; } = new List<TeacherBasicInformation>();

    public String Password { set; get; }

    public List<Course> course { set; get; } = new List<Course>();
    [JsonIgnore]
    public String JWT_Token { set; get; }

    [NotMapped]
    [Compare("Password")]

    public String ConfrimPassword { set; get; }

   }

And in TeacherBasicInformation class ,

 public class TeacherBasicInformation
 {
    [Key]

    public int ID { set; get; }

    [Required]
    [MaxLength(20)]
    public String Phone { set; get; }
    [Required]
    [MaxLength(100)]
    public String Address { set; get; }
}

After the migration in the sql server, in TeacherBasicInformation table a auto column is created named 'TeacherEmail'. How Can I insert data into this column using form in asp.net core.

Upvotes: 1

Views: 129

Answers (2)

Murat Yıldız
Murat Yıldız

Reputation: 12050

In order to prevent auto-generated columns for FK, use [ForeignKey("YourForeignKey")] on the related table in the entity class:

public int TeacherId { get; set; }        

[ForeignKey("TeacherId")]
public virtual Teacher Teacher { get; set; }

Upvotes: 1

Nik FP
Nik FP

Reputation: 3073

It looks like you have the email column set up as the primary key column in your Teacher class, and the related database column. If that's the case, you're going to have trouble with it as it will need to be unique to that record, and primary keys aren't designed to be changed. It can be done in certain scenarios but isn't a best practice.

Perhaps a better approach is to have the [Key] attribute on a property of public int Id { get; set; } so they primary key is now a discrete number instead of an email address. Then you can access, set, and update the email address on each record, without interfering with the key at all.

Upvotes: 1

Related Questions