我已經與數據庫很長一段時間了,但現在是實體框架的新手。我處理編程和數據庫開發的兩個方面。作爲一名db開發人員,我試圖保持它的清潔,所以我想出的這個結構對我來說工作得很好,但我不確定Entity Framework是否支持它,因爲我已經嘗試了幾天,使用了不同的場景,Data Annotations以及流利的API,但無法得到這個工作。EF核心一對多對多對一
我想要做的可能有點不合常規,但我試圖避免的是必須爲每個區域複製一個文件表,因此我定義了一個文件表,可以使用關係在多個區域使用。因此,我擁有的是:一個[公司,員工或項目]可以有多個文件(一對多)。同樣,文件表可以來源於任何區域(多到很多,在這種情況下,它不是數據而是結構,希望這是有意義的)。文件記錄僅與1個區域[公司,員工或項目](多對一)相關。
這種方法的明顯優點是,我可以避免必須管理3個文件表,但它不會在那裏結束。從FileAccess表中可以看到,不是在這裏有多個表或多個字段來表示指向多個表的指針,我只需要管理1個表來存取文件。關鍵在於RelationTable和RelationId,而不是特定的File.Id。
下面是我試圖完成的結構的簡化示例。它可以在實體框架中完成嗎?
public class Company
{
public Guid Id { get; set; }
public string Name { get; set; }
public virtual ICollection<File> Files { get; set; }
}
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<File> Files { get; set; }
}
public class Project
{
public int Id { get; set; }
public Guid? CompanyId { get; set; }
public string ProjectNo {get; set; }
public virtual ICollection<File> Files { get; set; }
}
public class File
{
public int Id { get; set; }
public Int16 RelationTable { get; set; } 0=Company, 1=Employee, 2=Project
public string RelationId { get; set; } Company.Id, Employee.Id, Project.Id
public string FileName { get; set; }
}
public class FileAccess
{
public int Id { get; set; }
public int EmployeeId { get; set; }
public Int16 RelationTable { get; set; } 0=Company, 1=Employee, 2=Project
public string RelationId { get; set; } Company.Id, Employee.Id, Project.Id
public string AccessType
}
你在問什麼叫多態關聯。作爲一名db開發人員,您知道這不能用關係數據庫中的FK關係表示。因此,任何EF版本(包括Core)都不支持。 –
謝謝這個詞!我很高興能夠明白我的觀點。我不是一個全職的db開發人員,我只根據需要做事情,是的,我知道你不能以這種方式設置FK關係。我懷疑EF不支持這個,但由於我只是在學習EF的第三週,所以我不確定EF是否有另一種方法來處理這個問題。我認爲我提出的解決方案應該可行。 –