如何防止错误 "Id: Name: Each property name in a type must be unique. Property name 'Id' is already defined."

How to prevent error "Id: Name: Each property name in a type must be unique. Property name 'Id' is already defined."

为了实现自定义身份验证模块,我使用了asp.net身份。我需要我的用户 class 继承自 asp.net 身份的用户 class。我有两个名称相同但值类型不同的字段,当然会出错。请告诉我我需要做什么来防止这个错误。将不胜感激。

// asp.net Identity User class
public class User : Entities.User, IUser
{
    public new string Id
    {
        get { return base.Id.ToString(); }
    }
}

// My User class   
public class Entities.User : BaseDomainObject
{
    public string Email { get; set; }
    public string PasswordHash { get; set; }
    public string SecurityStamp { get; set; }
    public string UserName { get; set; }
    public List<Login> Logins { get; set; }
}

public abstract class BaseDomainObject
{
    public BaseDomainObject()
    {
        CreatedOn = DateTime.Now;
        ModifiedDate = DateTime.Now;
    }

    public int Id { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedDate { get; set; }
    public DateTime? DeleteDate { get; set; }
}

无法让 2 个属性具有相同的名称,即使它们具有不同的类型。

如果您需要那个东西,这肯定是一个设计问题,您可能需要重新考虑您需要涵盖的业务场景并寻找不同的 design/solution。

更改您的设计,使 User 不继承自 Entities.User。

如果需要对 Entities.User 对象的引用,您可以将其作为 属性 存储在 User:

public class User : IUser
{
    private Entities.User _eUser;
    public Entities.User EUser
    {
        get { return _eUser; }
        set { _eUser = value; }
    }

    public string Id
    {
        get
        {
            return _eUser.Id.ToString();
        }
    }
}

https://en.wikipedia.org/wiki/Composition_over_inheritance

不要使用 IUser 接口,而是使用通用的 Microsoft.AspNet.Identity.IUser<int>,这样你就不需要更改 Id

的类型
public class User : Entities.User, Microsoft.AspNet.Identity.IUser<int> {

}