我目前在一个解决方案中有以下内容:
我希望我的模型和Core分开,但我不能在两个地方都有PetaPoco.cs。我如何分离它仍然能够用PetaPoco属性装饰我的Models项目中的POCO?
我不希望Models项目依赖于Core项目。
我确实创建了这个单独的类只在Models项目中,所以我可以装饰POCO,但是Core PetaPoco项目没有正确地拾取属性。它过分依赖PocoData。
建议?
// Poco's marked [Explicit] require all column properties to be marked
[AttributeUsage(AttributeTargets.Class)]
public class ExplicitColumnsAttribute : Attribute
{
}
// For non-explicit pocos, causes a property to be ignored
[AttributeUsage(AttributeTargets.Property)]
public class IgnoreAttribute : Attribute
{
}
// For explicit pocos, marks property as a column and optionally supplies column name
[AttributeUsage(AttributeTargets.Property)]
public class ColumnAttribute : Attribute
{
public ColumnAttribute() { }
public ColumnAttribute(string name) { Name = name; }
public string Name { get; set; }
}
// For explicit pocos, marks property as a result column and optionally supplies column name
[AttributeUsage(AttributeTargets.Property)]
public class ResultColumnAttribute : ColumnAttribute
{
public ResultColumnAttribute() { }
public ResultColumnAttribute(string name) : base(name) { }
}
// Specify the table name of a poco
[AttributeUsage(AttributeTargets.Class)]
public class TableNameAttribute : Attribute
{
public TableNameAttribute(string tableName)
{
Value = tableName;
}
public string Value { get; private set; }
}
// Specific the primary key of a poco class (and optional sequence name for Oracle)
[AttributeUsage(AttributeTargets.Class)]
public class PrimaryKeyAttribute : Attribute
{
public PrimaryKeyAttribute(string primaryKey)
{
Value = primaryKey;
autoIncrement = true;
}
public string Value { get; private set; }
public string sequenceName { get; set; }
public bool autoIncrement { get; set; }
}
[AttributeUsage(AttributeTargets.Property)]
public class AutoJoinAttribute : Attribute
{
public AutoJoinAttribute() { }
}
答案 0 :(得分:0)
我认为一个明显的解决方案,我不确定它会好得多,就是将PetaPoco移动到自己的项目中,然后在Core和Models项目中引用它。但是,您的模型仍然具有外部依赖性,而不是整个Core程序集。
另一种替代方法是将您的装饰模型放在Core项目中供内部使用,然后在Models程序集中包含一组未修饰的类。您可以使用自动映射组件轻松地在两者之间进行映射。所以基本上你会使用PetaPoco将数据提取到你的内部模型中,然后将它映射到你的'外部'模型,这只是没有依赖的裸类。
当然,这听起来像是额外的工作。我想这一切都取决于你的模型程序集没有其他依赖关系是多么重要。