在P548页,实体类的生成和VmDbContext的创建内容中,添加POCO实体类代码生成器时,自动生成的代码出现了问题。
示例中的自动生成代码如下:
using System;
using System.Collections.Generic;
namespace Artech.VM
{
public partial class Order
{
public Order()
{
this.OrderLines = new HashSet<OrderLine>();
}
public string OrderId { get; set; }
public string UserName { get; set; }
public System.DateTime OrderTime { get; set; }
public virtual ICollection<OrderLine> OrderLines { get; set; }
}
}
动手尝试的代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
namespace TVM.Models
{
public partial class Order
{
#region Primitive Properties
public virtual string OrderId
{
get;
set;
}
public virtual string UserName
{
get;
set;
}
public virtual System.DateTime OrderTime
{
get;
set;
}
#endregion
#region Navigation Properties
public virtual ICollection<OrderLine> OrderLine
{
get
{
if (_orderLine == null)
{
var newCollection = new FixupCollection<OrderLine>();
newCollection.CollectionChanged += FixupOrderLine;
_orderLine = newCollection;
}
return _orderLine;
}
set
{
if (!ReferenceEquals(_orderLine, value))
{
var previousValue = _orderLine as FixupCollection<OrderLine>;
if (previousValue != null)
{
previousValue.CollectionChanged -= FixupOrderLine;
}
_orderLine = value;
var newValue = value as FixupCollection<OrderLine>;
if (newValue != null)
{
newValue.CollectionChanged += FixupOrderLine;
}
}
}
}
private ICollection<OrderLine> _orderLine;
#endregion
#region Association Fixup
private void FixupOrderLine(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (OrderLine item in e.NewItems)
{
item.Order = this;
}
}
if (e.OldItems != null)
{
foreach (OrderLine item in e.OldItems)
{
if (ReferenceEquals(item.Order, this))
{
item.Order = null;
}
}
}
}
#endregion
}
}MVC的框架是4.0。将项目的框架从.NET 4.5改为了.NET 4.0,也没有解决问题。
DbContext的自动生成也有一些问题。
项目报出一个警告(可能是问题的关键)
正在运行转换: 输入文件似乎使用了此模板所不支持的架构版本。此可能会导致编译错误。请使用“添加新的生成项”以添加更新的模板。
本文详细介绍了在.NET4.0环境下,使用POCO实体类代码生成器时遇到的问题及解决方法,包括DbContext自动生成的一些常见问题,并提供了有效的解决方案。

1475

被折叠的 条评论
为什么被折叠?



