我正在尝试使用分部类来装饰EF为我可以访问的SQL视图自动生成的实体模型。这些视图是表的1:1表示,但省略了数据库中存在的主键和外键约束。我想用数据注释重现这些键/约束,但尝试在EF中使用它们失败了。
任何在LINQ中使用Include或Find的尝试总是失败。例如,这里定义的外键似乎无法识别:
public class FactTimeEntryMetadata
{
[Key]
public int TimeEntryKey { get; set; }
[ForeignKey("DimEmployee.EmployeeKey")]
public int EmployeeKey { get; set; }
}
[MetadataType(typeof(FactTimeEntryMetadata))]
public partial class FactTimeEntry { }
public class DimEmployeeMetadata
{
[Key]
public int EmployeeKey { get; set; }
}
[MetadataType(typeof(DimEmployeeMetadata))]
public partial class DimEmployee { }
在本例中,FactTimeEntry包含TimeEntryKey作为主键,以及EmployeeKey的列,引用DimEmployee中的外键。我的语法在某种程度上偏离了吗?还是首先使用实体框架数据库根本不可能做到这一点?
编辑:
我还尝试添加一个对对象的虚拟引用,比如:
public class FactTimeEntryMetadata
{
[Key]
public int TimeEntryKey { get; set; }
[ForeignKey("DimEmployee")]
public int EmployeeKey { get; set; }
public virtual DimEmployee DimEmployee { get; set; }
}
[MetadataType(typeof(FactTimeEntryMetadata))]
public partial class FactTimeEntry { }
public class DimEmployeeMetadata
{
[Key]
public int EmployeeKey { get; set; }
}
[MetadataType(typeof(DimEmployeeMetadata))]
public partial class DimEmployee { }
但也没有成功。
您仅有的三个选项首先使用ef数据库:
-
将您的密钥和关系放入数据库中。关系数据库被创建为关系数据库。如果你不这样做,为什么要使用数据库?
-
正如Gert Arnold在评论中所说,编辑EDMX并分配您的关联。
-
使用自定义代码编辑T4模板,将键/关系添加到对象中。