这是一个关于InvalidOperationException的问题,消息类成员X未映射.
我们的一个系统对于每个具有框架版本3.5的LinqToSql实体具有相同的基本实体.
我遇到了一个非常奇怪的问题,我开始研究它.我做了一个非常小的项目,以便能够更轻松地本地化问题.
实体基类
public abstract class EntityBase
{
public virtual long ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
DataContext和Entity
[Database(Name = "TestDatabase")]
public class EntitiesDataContext : DataContext
{
public EntitiesDataContext() :
base(Settings.Default.TestDatabaseConnectionString, new AttributeMappingSource())
{
}
}
[Table(Name = "dbo.MyEntity")]
public class MyEntity : EntityBase
{
private long _EntityID;
[Column(Name = "EntityID", Storage = "_EntityID")]
public override long ID
{
get { return _EntityID; }
set { _EntityID = value; }
}
[Column] public string …Run Code Online (Sandbox Code Playgroud) 我有一些linq实体继承了这样的东西:
public abstract class EntityBase { public int Identifier { get; } }
public interface IDeviceEntity { int DeviceId { get; set; } }
public abstract class DeviceEntityBase : EntityBase, IDeviceEntity
{
public abstract int DeviceId { get; set; }
}
public partial class ActualLinqGeneratedEntity : DeviceEntityBase
{
}
Run Code Online (Sandbox Code Playgroud)
在通用方法中,我使用以下命令查询DeviceEnityBase派生实体:
return unitOfWork.GetRepository<TEntity>().FindOne(x => x.DeviceId == evt.DeviceId);
Run Code Online (Sandbox Code Playgroud)
其中TEntity有一个绑定,它是一个DeviceEntityBase.此查询始终失败,并出现InvalidOperationException,并显示消息"类成员DeviceEntityBase.DeviceId未映射".即使我在抽象基类中添加了一些映射信息
[Column(Storage = "_DeviceId", DbType = "Int", Name = "DeviceId", IsDbGenerated = false, UpdateCheck = UpdateCheck.Never)]
Run Code Online (Sandbox Code Playgroud)