2016-09-23 107 views
0

(使用Microsoft.AspNet.Identity)C#我可以从EntityFramework扩展IdentityMessage吗?

的EmailService内的IdentityMessage消息有3个属性

public virtual string Body { get; set; } 
public virtual string Destination { get; set; } 
public virtual string Subject { get; set; } 

当你只有1“从” ADRESS它是足够的,但如果你想要更多的则一个“来自”地址,这是一个问题,我需要额外的财产。

public string From { get; set; } 

所以我扩展的类IdentityMessage(就像我与用户和角色DIT)

public class ExtendedMessage : IdentityMessage 
{ 
    public string From { get; set; } 
} 

所以我改变了默认实现

public class EmailService : IIdentityMessageService 
{ 
    public async Task SendAsync(IdentityMessage message) 
    { 
     await configSMTPasync(message); 
    } 

    // send email via smtp service 
    private async Task configSMTPasync(IdentityMessage message) 
    { 
     // SEND MAIL 
    } 
} 

随着

public class EmailService : IIdentityMessageService 
{ 
    public async Task SendAsync(ExtendedMessage message) 
    { 
     await configSMTPasync(message); 
    } 

    // send email via smtp service 
    private async Task configSMTPasync(ExtendedMessage message) 
    { 
     // SEND MAIL 
    } 
} 

但是IIdentityMessageService是st生病参考原始的IdentityMessage(它不像预期的那样工作)

什么是最好的方式来得到这个工作(使用Microsoft.AspNet.Identity;框架)?

在此先感谢。

+0

看看ClaimsIdentity,它有一个字典,你可以添加你想添加的任何属性。 –

回答

0

您不能使用继承,因为一旦从数据源加载实体,EF将不知道继承,因此它将实例化基本类型而不使用属性,而不使用您的属性派生类型。如果EF必须使用它,任何继承都必须映射到EDMX中。

使用部分类将解决你的问题,但:

部分类的所有部分必须在同一程序中定义从您的局部部分 属性不会从你的一部分的区域保存到数据库 属性不能用在LINQ到实体的查询

相关问题