我为我正在进行的项目采用了模型第一种方法。类关系的一个例子如下所示,非常明确:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
List<Photo> Photos { get; set; }
}
public class Photo
{
public int Id { get; set; }
public string Path { get; set; }
}
数据库架构大致为:
--------------
Products Table
--------------
Id int,
Name Varchar
------------
Photos Table
------------
Id int,
Path varchar
ProductId int FK Products.ID
产品可以有零个或多个照片。
现在,当我尝试插入是我的首选ORM(实体框架V4 - Poco方法)时,我不得不在域模型中映射我的关系!
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
List<Photo> Photos { get; set; }
}
public class Photo
{
public int Id { get; set; }
public string Path { get; set; }
public int ProductId {get; set; } //Foriegn Key
public Product Proudct {get; set; } //For uni-directional navigation
}
首先,我不需要/想要单向导航。我明白这可以删除。其次,我不希望在Photos类中声明Foriegn Key。
如果我必须在域对象中定义数据库属性,我不认为这是真正的POCO /持久性无知吗?
其他ORM的行为是这样的吗?
答案 0 :(得分:1)
我找到了答案。使用该向导,可以选择“在模型中包含外键列” - 取消选中此框,您将获得一个没有FK的干净概念模型。
确保在属性窗口中将代码生成策略设置为none。
答案 1 :(得分:0)
为什么不想拥有 Photo.Product 属性?如果没有这样的属性,似乎一张照片可以属于多个产品,因为数据库模式应该更复杂(使用辅助表)。
答案 2 :(得分:0)
关系不必是双向的,也不必是公开的(如果使用真正的POCO,而不是代理类型)。您已经对代码中不想要的东西说了很多,但是您可以更清楚地了解 想要如何定义关系吗?它必须去某个地方。你想把它放在哪里?有很多选择。