我有一個Asp.Net項目與實體框架7我有一個電子郵件類與附件列表。地圖私有財產
我不想離開,任何人添加項目到我的清單,其中我有
private List<Attachment> Resources { get; set; } public IEnumerable<Attachment> Attachments { get; set; }
現在,我想要映射到數據庫屬性的資源,而不是附件的關係。
實體框架7上升例外...
我該如何做到這一點。
我有一個Asp.Net項目與實體框架7我有一個電子郵件類與附件列表。地圖私有財產
我不想離開,任何人添加項目到我的清單,其中我有
private List<Attachment> Resources { get; set; } public IEnumerable<Attachment> Attachments { get; set; }
現在,我想要映射到數據庫屬性的資源,而不是附件的關係。
實體框架7上升例外...
我該如何做到這一點。
將此區分爲兩種不同的模型,一種是映射到數據庫的內部模型,另一種是用戶可用的模型。 這也是在圖層之間傳遞數據的正確方法。
希望它有幫助!
我同意Itay。
也許這個代碼示例可以幫助你。
製作映射到數據庫表的實體。
public class EmailState
{
public int Id { get; private set; }
public List<AttachmentState> Resources { get; set; }
public static Email ToEmail(EmailState state)
{
return new Email(state);
}
}
public class AttachmentState
{
public static Attachment ToAttachment(AttachmentState state)
{
return new Attachment(state);
}
public Attachment ToAttachment()
{
return new Attachment(this);
}
}
製作類是提供給用戶
public class Email
{
public Email()
{
this.State = new EmailState();
}
internal Email(EmailState state)
{
this.State = state;
}
internal EmailState State { get; set; }
public int Id { get; private set; }
public IEnumerable<Attachment> Attachments()
{
return this.State.Resources.Select(x => x.ToAttachment());
}
public void AddAttachment(Attachment attachment)
{
this.State.Resources.Add(attachment.State);
}
}
public class Attachment
{
public Attachment()
{
this.State = new AttachmentState();
}
internal Attachment(AttachmentState state)
{
this.State = state;
}
internal AttachmentState State { get; set; }
}
定義的DbContext
public class EmailDbContext : DbContext
{
public DbSet<EmailState> Emails { get; set; }
public DbSet<AttachmentState> Attachments { get; set; }
}
製作庫
public interface IEmailRepository
{
void Add(Email email);
Email GetById(int emailId);
}
public class EmailRepository : IEmailRepository
{
private EmailDbContext _context;
public EmailRepository(EmailDbContext context)
{
_context = context;
}
public void Add(Email email)
{
_context.Emails.Add(email.State);
}
public Email GetById(int emailId)
{
EmailState emailState = _context.Emails.Single(x => x.Id == emailId);
return new Email(emailState);
}
}
使用方法如下
using (var context = new EmailDbContext())
{
IEmailRepository repository = new EmailRepository(context);
var email = new Email();
repository.Add(email);
context.SaveChanges();
var emailFoundById = repository.GetById(email.Id);
}
你能告訴我們EF拋出什麼異常嗎? – Pedro
另外,您爲什麼要將EF映射完成到'Resources'屬性而不是'Attachments'之一? – Pedro