首页 新闻 搜索 专区 学院

Entity Framework code first如何设置不在数据库中生成外键?

0
悬赏园豆:100 [已解决问题] 解决于 2014-09-15 07:41

由于项目的数据库是Hibernate那边创建的,表B是表A的父表,A中有Bid字段但并没有创建外键与B表关联.

使用EF 直接生成的代码,只能从A中先查询出Bid,再根据Bid去B里面查B表的信息,这样使用太麻烦了.能不能在A中手动添加B对象,直接使用然后又不需要改动数据库呢?

 

总而言之,就是自定义实体关联,只生成外键字段,不希望在数据库中生成外键.

TYR的主页 TYR | 初学一级 | 园豆:119
提问于:2014-08-31 06:16
< >
分享
最佳答案
1

你现在用的EF是什么版本?我用EF6,你可以重写SqlServerMigrationSqlGenerator的生成外键和更新外键的方法,把不需要的表都过滤掉不就ok了?

public class ExtendedSqlGenerator : SqlServerMigrationSqlGenerator
{
        #region 外键
        protected override void Generate(DropForeignKeyOperation dropForeignKeyOperation)
        {
            if (IsIgnoreTable(dropForeignKeyOperation.DependentTable))
                return;
            base.Generate(dropForeignKeyOperation);
        }

        protected override void Generate(AddForeignKeyOperation addForeignKeyOperation)
        {
            if (IsIgnoreTable(addForeignKeyOperation.DependentTable))
                return;
            base.Generate(addForeignKeyOperation);
        } 
        #endregion


}
收获园豆:100
代码乱了 | 菜鸟二级 |园豆:208 | 2014-09-04 10:43
其他回答(2)
0

可以把A的BID与B的ID关联,然后通过管理控制台完成数据库的移植功能更新数据库创建关联。

 

如果你不想生成外键,那么你只能在A中定义一个类型为B的实体属性,然后设定这个实体属性不被映射到数据库,最后,对这个实体属性处理如下:

 

public class A
{
    private int _bid;
    public int Bid
    {
        get
        {
            return _bid;
        }
        set
        {
            _bid = value;
            _b = null;
            _bLoaded = false;
        }
    }

private B _b; private bool _bLoaded = false; public B B { get { if(!_bLoaded) { _b = this.LoadB();
_bLoaded = true; }
return _b; } set { if(value == null) { throw ArgumentNotNullException("value"); } _b = value; _bLoaded = true; _bid = _b.Id; } } }

 

同时,编写以下扩展:

 

public static AExtensions
{
    public static B LoadB(this A a)
    {
        //此处执行通过id加载B的功能
        return _bService.GetBById(a.Bid);
    }
}
519740105 | 园豆:5810 (大侠五级) | 2014-08-31 09:36
0

Entity Framework Code First 配置介绍:引用关系

http://www.dozer.cc/2012/09/entity-framework-code-first-configuring-relationships/

LiuKaiFa | 园豆:1491 (小虾三级) | 2014-09-01 08:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册