首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架6关系

实体框架6关系
EN

Stack Overflow用户
提问于 2015-01-02 11:41:27
回答 1查看 101关注 0票数 0

使用的工具:

代码语言:javascript
复制
WPF .Net 4.5
MySQL - Lastest version
Visual Studio 2013 Community Edition

问题

嗨,

我在将POCO对象映射到现有数据库时遇到了问题,在该数据库中,我有一个基类,它包含由所有模型类继承的ID属性。

在上下文的OnModelCreating方法中,基类本身被忽略,当我试图指定用户和会话之间的关系时,问题就开始了。

各表如下:

代码语言:javascript
复制
====================
User
====================
ID | Name | Password
====================


====================
Session
====================
ID | Password | User
====================

会话表中的第三列" user“包含用户ID,因此通常我可以使用普通的旧SQL将user表连接到session表。

我在web上看到的所有示例都涉及创建一个导航属性,首先,它会创建循环引用,当您尝试序列化对象时会产生麻烦,而序列化则用于客户端和服务器之间的通信。

第二个问题是,这是一个大得多的系统的玩具例子,物体会受到很多属性的污染。

在此示例中,会话对象知道用户的情况,但用户不知道他的会话。到目前为止,我试图用以下方法绘制会议的地图:

代码语言:javascript
复制
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    ();
    }
}

但是,正如您所看到的,我没有指定外键,而是在尝试保存会话对象时出现以下错误:

代码语言:javascript
复制
Unknown column 'User_ID' in 'field list'

这是有道理的,但我如何解决这个问题呢?

参考码

代码语言:javascript
复制
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    ());
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-03 01:03:43

找到答案了。

在session表中,我将"User“列更改为"UserID”,然后在SessionMap类中执行以下操作:

代码语言:javascript
复制
this.HasRequired (a => a.User)
    .WithMany    ()
    .Map         (m => m.MapKey ("UserID"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27741618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档