使用的工具:
WPF .Net 4.5
MySQL - Lastest version
Visual Studio 2013 Community Edition问题
嗨,
我在将POCO对象映射到现有数据库时遇到了问题,在该数据库中,我有一个基类,它包含由所有模型类继承的ID属性。
在上下文的OnModelCreating方法中,基类本身被忽略,当我试图指定用户和会话之间的关系时,问题就开始了。
各表如下:
====================
User
====================
ID | Name | Password
====================
====================
Session
====================
ID | Password | User
====================会话表中的第三列" user“包含用户ID,因此通常我可以使用普通的旧SQL将user表连接到session表。
我在web上看到的所有示例都涉及创建一个导航属性,首先,它会创建循环引用,当您尝试序列化对象时会产生麻烦,而序列化则用于客户端和服务器之间的通信。
第二个问题是,这是一个大得多的系统的玩具例子,物体会受到很多属性的污染。
在此示例中,会话对象知道用户的情况,但用户不知道他的会话。到目前为止,我试图用以下方法绘制会议的地图:
public
class SessionMap : EntityTypeConfiguration <Session>
{
public
SessãoMap ()
{
/**
* Table.
*/
this.ToTable ("Session");
/**
* Primary key.
*/
this.HasKey (a => a.ID);
/**
* Columns.
*/
this.Property (a => a.ID );
this.Property (a => a.Password);
this.HasRequired (a => a.User)
.WithMany ();
}
}但是,正如您所看到的,我没有指定外键,而是在尝试保存会话对象时出现以下错误:
Unknown column 'User_ID' in 'field list'这是有道理的,但我如何解决这个问题呢?
参考码
public
abstract
class Base
{
public Int64 ID {get;set;}
}
public
class User : Base
{
public String Name {get;set;}
public String Password {get;set;}
}
public
class Session : Base
{
public String Password {get;set;}
public User User {get;set;}
}
public
class Context : DbContext
{
public DbSet <Session> Sessions {get;set;}
public DbSet <User> Users {get;set;}
public
Context () : base ("name=MySQLConnectionString")
{
}
protected
override
void OnModelCreating (DbModelBuilder Builder)
{
base.OnModelCreating (Builder);
Builder.Ignore <Base> ();
Builder.Configurations.Add (new Mapping.SessionMap ());
Builder.Configurations.Add (new Mapping.UserMap ());
}
}发布于 2015-01-03 01:03:43
找到答案了。
在session表中,我将"User“列更改为"UserID”,然后在SessionMap类中执行以下操作:
this.HasRequired (a => a.User)
.WithMany ()
.Map (m => m.MapKey ("UserID"));https://stackoverflow.com/questions/27741618
复制相似问题