我在c#winforms上使用实体框架4。
我有一个带有2个表的SQL Server数据库:
Users
表:
UserId (int) (PK)
UserName
Products
表:
ProductId (int)(PK)
ProductTitle
UserId1 (int) (foreign key referencing `UserId` in `Users` table)
UserId2 (int) (foreign key referencing `UserId` in `Users` table)
我正在使用实体框架(包括模型中的外键列)在我的C#项目中建模SQL Server数据库。
然后我获得了此代码的记录:
Entities dbEnteties = new Entities();
dbEnteties.ContextOptions.LazyLoadingEnabled = false;
var dbe = dbEnteties.Products.Include("Users");
var result = dbe.ToList();
当我从数据库中获取记录时,我看到UserId1
字段具有数据,但UserId2
字段是Null
。
我的C#代码怎么了?我该如何解决这个问题?!
,您可以在产品表中有两个指向用户表的外国键。我一直这样做,您这样做的原因很好。
由于您已经关闭了懒惰的加载,因此如果您希望查询自动加载它们,则需要明确"包括"导航属性。您将不得不弄清楚实体框架自动为您创建的导航属性的名称是什么。我假设您正在使用"数据库第一"模型。如果是这样,请双击您的.EDMX文件,然后查看产品表。您应该在那里看到一个称为"导航属性"的部分。它们可能被称为"用户"one_answers"用户1"。如果是这种情况,那么您需要执行以下操作。由于表之间有两个单独的关系,因此您需要两个单独的"。"语句:
dbEnteties.Products.Include(product => product.User);
dbEnteties.Products.Include(product => product.User1);
(请确保在文件的顶部使用System.Data.Entity; 使用,否则lambda语法将不起作用。)