我有一个包含多个字段的表,每个字段都由单独的ViewModel单独更新,现在我想获取特定字段的最新值(也许它已在我的表的第五条记录中更新),好吗?现在我写的是这样的:
public ViewResult ShowPiece()
{
var context = new SiteContext();
var showPiece = context.Portraits.LastOrDefault();
return View(showPiece);
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行应用程序并导航到上面的操作时,我得到了错误:
LINQ to Entities无法识别该方法,并且此方法无法转换为商店表达式...
有什么问题?
我将在我的数据访问层中使用存储库和UnitOfwork来执行此操作,查看一个联系人aggregateroot
public interface IAggregateRoot
{
}
Run Code Online (Sandbox Code Playgroud)
这是我的Generic存储库接口:
public interface IRepository<T>
{
IEnumerable<T> GetAll();
T FindBy(params Object[] keyValues);
void Add(T entity);
void Update(T entity);
void Delete(T entity);
}
Run Code Online (Sandbox Code Playgroud)
和我在模型中的POCO Contact类
public class Contact :IAggregateRoot
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public DateTime CreationTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我继承自IRepository的IContactRepository,也可能是自己的方法
public interface …Run Code Online (Sandbox Code Playgroud) 我正在使用EntityFramework的代码优先功能,并且我已经创建了一个具有此属性的模型类,它们具有自己的属性(我在这里没有提到它们!):
public class Portrait
{
private Guid _id;
private string _aboutimage;
private string _aboutMe;
private string _mainMenu;
private string _headerImage;
private string _resume;
private string _showpiece;
private string _siteMenu;
private string _adminMenu;
}
Run Code Online (Sandbox Code Playgroud)
对于这个类的每个部分,我都有单独的ViewModel,例如我必须在admin部分AboutViewModel更新About并在网站的about page中导航:
public class AboutViewModel
{
public Guid Id { get; set; }
public string AboutText { get; set; }
public string Image { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在当我更新时AboutViewModel,Portrait数据库中的表将创建一个关于文本的记录(其他字段将为null)
并且为了更新此表的其他部分Resume或其他部分,它将生成另一个带有更新和插入字段的记录(现在在此记录中有关文本将为null!)
现在我怎么能得到about字段在UI中显示它,因为我有几个记录!我不想也不能通过ID获取这些字段,因为我总是希望将最新的更新显示在网站上,我写的是这样的,我关于获取about文本的动作是这样的:
public ViewResult About()
{
var about= …Run Code Online (Sandbox Code Playgroud) 我想创建这样的东西:
2013年5月,2013
年
3月,2013年
2月,2013年
1月,2013年
12月,2012年
11月,2012年
我写的是这样的:
var currentDate = DateTime.Now;
var list = new List<ArchiveViewModel>();
for (var startDate = new DateTime(2013, 1, 1); startDate.Month <= currentDate.Month; startDate = startDate.AddMonths(1))
{
list.Add(new ArchiveViewModel
{
Month = startDate.Month,
Year = startDate.Year,
FormattedDate = startDate.ToString("MMMM, yyyy")
});
}
Run Code Online (Sandbox Code Playgroud)
和ArchiveViewModel是这样的:
public class ArchiveViewModel
{
public int Month { get; set; }
public int Year { get; set; }
public string FormattedDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是,它只创建特定年份(2012年或2013年)的几个月:
January, 2013
February, 2013 …Run Code Online (Sandbox Code Playgroud)