我是实体框架的新手,
要更新单元格值,如果当前字段与另一个sql表(实体类)有关系, 我想获取该外部表(以显示在daragridview等中,从中选择一个新值)
但是我不知道该怎么做?你能给我一个例子继续吗?
其他: 不幸的是,我找到了一个基于sql(ADO.NET)而不是EF的解决方案,以检查是否存在关联的列
,如果有,用哪个表? 答案是对我的询问;
select
tp.name 'ParentTable', cp.name as ForeignInParent, tr.name 'ForeignTable', cr.name ForeignValueMember, fk.name FK_Name
FROM sys.foreign_keys fk
INNER JOIN sys.tables tp ON fk.parent_object_id = tp.object_id
INNER JOIN sys.tables tr ON fk.referenced_object_id = tr.object_id
INNER JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN sys.columns cp ON fkc.parent_column_id = cp.column_id AND fkc.parent_object_id = cp.object_id
INNER JOIN sys.columns cr ON fkc.referenced_column_id = cr.column_id AND fkc.referenced_object_id = cr.object_id
where tp.name='Payments' and cp.name = 'UserID'
我希望我可以在EF中做到这一点
答案 0 :(得分:0)
想象一下这两个类:
public class User
{
public int Id {get; set;}
public string Name{ get;set;}
....
}
public class Payment
{
public int Id {get; set;}
public int UserId {get; set;}
....
}
现在UserId是外键:
如果您使用的是实体框架(数据库优先),并且类是自动生成的,则:
a。将每个User
放在其后的Payments
都将.
作为其子项:
用户user = SomeQuery ...
您有user.Payments
b。每次付款都具有用户属性:
Payment payment = somequery...
您可以访问通过payment.User
付款的用户
.edmx
扩展名查找文件。它显示了表格图。每个表都有一些字段,在字段的底部,有一个Navigation Properties
,该字段显示由于外键可访问的属性:.tt
文件。您可以在该数据库中找到自动生成的类。 virtual
的所有字段都是由于外键,因为它们仅是导航键,并不真正属于该表(基于一对一,一对多,...关系),因此它们可以是虚拟的Something或虚拟的ICollecion。编辑:
要按照注释中的说明检查运行时字段是否为外键,必须使用Reflection。 check out this answer。