在非主键上映射一对多

时间:2014-08-18 11:09:43

标签: c# entity-framework entity-framework-6

我正在为遗留数据库(简化)执行代码优先实体模型:

CREATE TABLE Person
(
    PersonID INT PRIMARY KEY NONCLUSTERED IDENTITY(1,1),
    Name NVARCHAR(255),
    PersonSystemID NVARCHAR(50) NOT NULL UNIQUE
); 

CREATE TABLE Address
(
    AddressID INT PRIMARY KEY NONCLUSTERED IDENTITY(1,1),
    PropertyDetails NVARCHAR(255),
    PersonSystemID NVARCHAR(50),
    FOREIGN KEY (PersonSystemID) REFERENCES Person(PersonSystemID)
)

唯一有趣的细节是Address表引用PersonSystemID而不是PersonID,这是Person表的真正PK。

我想在Addresses类中使用名为Person的属性,在Person类中使用属​​性Address。有没有办法映射这个? (欢迎使用软糖和/或cluges。)

请注意,这是一个只读数据库 - 所以我不需要处理INSERTS / UPDATES / DELETES。

1 个答案:

答案 0 :(得分:2)

目前您无法做到,但可能会在将来的版本中提供。

  

我们正致力于EF7中的唯一约束支持。

http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1050579-unique-constraint-i-e-candidate-key-support

现在的解决方法是删除这些导航属性并手动加入实体。

var result = from p in db.Person
             join a in db.Address
             on p.PersonSystemID equals a.PersonSystemID
             select new { Person = p, Address = a };