在我的应用程序中,我希望从Server 2012中数据库'MSDB‘中的系统表'sysmail_mailitems’中检索sysmail_mailitems。我在C# web应用程序中使用实体框架查询数据库。我为sysmail_mailitems和方法创建了一个类来读取数据。但实际上它在系统表之外创建了一个具有此名称的新表。我的目标不是创建一个表,而是从现有的表中读取。有人能指点我怎么做吗?
代码:
public class sysmail_mailitem
{
[Key]
public Int32 mailitem_id { get; set; }
public Int32 profile_id { get; set; }
public String recipients { get; set; }
public String copy_recipients { get; set; }
public String blind_copy_recipients { get; set; }
public String subject { get; set; }
public String from_address { get; set; }
public String reply_to { get; set; }
public String body { get; set; }
public String body_format { get; set; }
public String importance { get; set; }
public String sensitivity { get; set; }
public String file_attachments { get; set; }
public String attachment_encoding { get; set; }
public String query { get; set; }
public String execute_query_database { get; set; }
public Boolean? attach_query_result_as_file { get; set; }
public Boolean? query_result_header { get; set; }
public Int32? query_result_width { get; set; }
public String query_result_separator { get; set; }
public Boolean? exclude_query_output { get; set; }
public Boolean? append_query_error { get; set; }
public DateTime send_request_date { get; set; }
public String send_request_user { get; set; }
public Int32? sent_account_id { get; set; }
public Byte? sent_status { get; set; }
public DateTime? sent_date { get; set; }
public DateTime last_mod_date { get; set; }
public String last_mod_user { get; set; }
}
public String GetMailRecipients(Int32 mailItemId)
{
using(MSDBContext _db = new MSDBContext())
{
var query = (from mailItems in _db.MailItems
where mailItems.mailitem_id == mailItemId
select mailItems).FirstOrDefault();
try
{
return query.blind_copy_recipients;
}
catch (NullReferenceException) { }
return "N/A";
}
}
public class MSDBContext : DbContext
{
public MSDBContext() : base("msdb") { }
public DbSet<sysmail_mailitem> MailItems { get; set; }
}发布于 2014-07-14 19:20:50
最后,我想出了使用ExecuteStoreQuery从MSDB检索数据的原始sql命令。
代码:
public String GetMailRecipients(Int32 mailItemId)
{
using(context _db = new context())
{
var obj = ((IObjectContextAdapter)_db).ObjectContext;
return obj.ExecuteStoreQuery<String>("SELECT blind_copy_recipients FROM msdb.dbo.sysmail_mailitems WHERE mailitem_id = {0}", mailItemId).FirstOrDefault();
}
}发布于 2018-08-08 19:09:33
如果您想以最初的方式尝试,使用DBSet等,您可以这样做。您的问题是,当表名为sysmail_mailitem (带有s)时,调用类sysmail_mailitems。因此,您必须对类上面的实际表名进行注释,如下所示:
[Table("sysmail_mailitems")]
public class sysmail_mailitem
{https://stackoverflow.com/questions/24742753
复制相似问题