Объединить два свойства в сущность Entity Framework с частичным классом - PullRequest
0 голосов
/ 26 июня 2018

Я использую Entity Framework.

Моя сущность клиента:

public partial class Customer
{
    public virtual int ID { get; set; }

    public virtual string FirstName { get; set; }

    public virtual string LastName { get; set; }

    public virtual string CompanyName { get; set; }
}

И у меня есть класс BaseEntity, который наследуется частичным классом клиента.

public class BaseEntity
{
    public virtual int ID { get; set; }
}

public partial class Customer : BaseEntity
{

}

После этого я создал общий метод следующим образом:

public static int GetId<T>(T entity) where T : BaseEntity
    {
        // id is zero after savechanges
        var id = entity.ID;

        return id;
    }

Моя проблема возникла, когда я хочу получить идентификатор после SaveChanges () в общем методе, это ноль - 0.

Мойкод теста:

var db = new ContextDb();

        db.Customers.Add(customer);
        db.SaveChanges();

        WriteLine($@"{customer.ID}"); // OK

        WriteLine($@"{GetId(customer)}"); // Not OK --> ZERO

Спасибо всем, что нашли время, чтобы попытаться помочь объяснить.

1 Ответ

0 голосов
/ 26 июня 2018

Это связано с тем, что у вас действительно есть два поля ID: одно (скрытое) из BaseEntity (нулевое значение) и одно из Customer (не нулевое).Попробуйте override ID свойство или просто удалите его из Customer объявления класса:

public partial class Customer
{
    public override int ID { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string CompanyName { get; set; }
}

Также вы можете пометить свойство ID и BaseEntity class abstract для принудительного вызова override ID свойство унаследованных классов:

public abstract class BaseEntity
{
    public abstract int ID { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...