我有方法,放在DbContext类,它从DB获取表名取决于类型:
public Type GetDataType(Type type)
{
if (!type.IsSubclassOf(typeof(Test)))
throw new ArgumentException("The Wrong type provided. A subclass of Test is expected.");
Type testType = GetEntityType(type);
TestAttribute testAttribute = testType.GetCustomAttributes(false).OfType<TestAttribute>().SingleOrDefault() as TestAttribute;
if (testAttribute == null)
throw new ArgumentException("Test attribute not found");
Type result = testAttribute.DataType;
return result;
}
public Type GetEntityType(Type type)
{
return type.Namespace == "System.Data.Entity.DynamicProxies" ? type.BaseType : type;
}
我想要做的是将这些方法移到BL,但testAttribute
之后变为null
,尽管testType.GetCustomAttributes(false)
在两种情况下返回相同的事实。
我的测试属性是:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public class TestAttribute : Attribute
{
public Type DataType { get; private set; }
public TestAttribute(Type dataType)
{
DataType = dataType;
}
}
我正在上课的是:
[Test(typeof(testDataItem))]
public class classTest : Test
{
//some fields
}
我缺少什么?